Unity/C#:程序网格的程序纹理
Unity/C#: procedural texture for procedural mesh
我想在 Unity/C# 中生成网格和纹理程序。但是,我对自定义网格的所有尝试仅显示第一个纹素。我试图尽可能地简化问题并提出了以下示例代码,它绘制了一个白色方块而不是 "polish flag".
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {
[SerializeField] Material unlitMaterial;
void Start () {
Mesh mesh = new Mesh();
mesh.vertices = new Vector3[4] { Vector3.zero, new Vector3 (1, 0, 0), new Vector3 (1, 0, 1), new Vector3 (0, 0, 1) };
mesh.triangles = new int[6] {1, 0, 3, 2, 1, 3 } ;
mesh.RecalculateNormals();
Texture2D texture = new Texture2D (2, 2);
texture.SetPixels (new Color[4] {Color.white, Color.white, Color.red, Color.red});
texture.filterMode = FilterMode.Point;
texture.Apply();
GameObject gameObject = new GameObject ();
MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer> ();
if (unlitMaterial != null)
meshRenderer.material = unlitMaterial;
meshRenderer.material.mainTexture = texture;
gameObject.AddComponent<MeshFilter> ().mesh = mesh;
}
}
(我尝试了不同的材料,例如unlit/texture没有效果)
非常感谢您的帮助;-)
我认为您缺少设置 UV。检查这个:Unity3D answers link
since he only has 4 verts, just handset them to (0,0) (0,1) (1,1) and (1,0): uvs[0]=new Vector2(0,0); ....
然后这样设置:mesh.uv = uvs;
我想在 Unity/C# 中生成网格和纹理程序。但是,我对自定义网格的所有尝试仅显示第一个纹素。我试图尽可能地简化问题并提出了以下示例代码,它绘制了一个白色方块而不是 "polish flag".
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {
[SerializeField] Material unlitMaterial;
void Start () {
Mesh mesh = new Mesh();
mesh.vertices = new Vector3[4] { Vector3.zero, new Vector3 (1, 0, 0), new Vector3 (1, 0, 1), new Vector3 (0, 0, 1) };
mesh.triangles = new int[6] {1, 0, 3, 2, 1, 3 } ;
mesh.RecalculateNormals();
Texture2D texture = new Texture2D (2, 2);
texture.SetPixels (new Color[4] {Color.white, Color.white, Color.red, Color.red});
texture.filterMode = FilterMode.Point;
texture.Apply();
GameObject gameObject = new GameObject ();
MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer> ();
if (unlitMaterial != null)
meshRenderer.material = unlitMaterial;
meshRenderer.material.mainTexture = texture;
gameObject.AddComponent<MeshFilter> ().mesh = mesh;
}
}
(我尝试了不同的材料,例如unlit/texture没有效果)
非常感谢您的帮助;-)
我认为您缺少设置 UV。检查这个:Unity3D answers link
since he only has 4 verts, just handset them to (0,0) (0,1) (1,1) and (1,0): uvs[0]=new Vector2(0,0); ....
然后这样设置:mesh.uv = uvs;