下面是生成通过internet收集的多维数据集的方法:
static void CreateCube () {
Vector3[] vertices = {
new Vector3 (0, 0, 0),
new Vector3 (1, 0, 0),
new Vector3 (1, 1, 0),
new Vector3 (0, 1, 0),
new Vector3 (0, 1, 1),
new Vector3 (1, 1, 1),
new Vector3 (1, 0, 1),
new Vector3 (0, 0, 1),
};
int[] triangles = {
0,
2,
1, //face front
0,
3,
2,
2,
3,
4, //face top
2,
4,
5,
1,
2,
5, //face right
1,
5,
6,
0,
7,
4, //face left
0,
4,
3,
5,
4,
7, //face back
5,
7,
6,
0,
6,
7, //face bottom
0,
1,
6
};
GameObject tem = new GameObject ("Custom Mesh");
tem.AddComponent<MeshFilter> ();
Mesh mesh = tem.GetComponent<MeshFilter> ().mesh;
mesh.Clear ();
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.Optimize ();
mesh.RecalculateNormals ();
}
当我调用此方法时,它会给出错误:
由于在编辑模式下调用MeshFilter.mesh而实例化网格。这会漏网的。请改用MeshFilter.sharedMesh。UnityEngine.MeshFilter:get_mesh()
当我最后将Mesh mesh = tem.GetComponent<MeshFilter>().mesh;
改为Mesh mesh = tem.GetComponent<MeshFilter>().sharedMesh;
时
它给了我另一个错误,它说:
NullReferenceException:未设置为对象实例的对象引用
我点击了控制台,它将我转到了同一行。
发布于 2019-06-22 11:58:45
我假设您需要在编辑器中运行,而不是在运行时或在播放模式下运行。
您不需要从MeshFilter中获取网格,因为您无论如何都清除了它并替换了它的所有内容。该网格也是空的,因为您刚刚动态地创建了该组件。它没有引用任何东西。
只要做Mesh mesh = new Mesh();
。然后将其分配给您刚刚在其MeshFilter字段上创建的sharedMesh。AddComponent<>()方法返回组件,因此不需要再次获取它。
https://stackoverflow.com/questions/56714938
复制相似问题