我在代码中创建了一个自定义,当我在游戏或编辑器中查看它时它会使一些面孔消失,这样我就可以更清楚地看到它。我可以理解这将如何有用,但它不仅对游戏玩法而且只是在项目上工作时很烦人。可能只有一个盒子我必须取消选中,但我不知道那是什么。我已经包含了一些截图(第一个是在游戏中,第二个是在编辑器中。网格应该是一个完整的金字塔形状)。我的立方体网格有12个三角形,8个顶点,没有uvs,因为默认网格有24个顶点,12个三角形,uv和uv2,仅供参考。 mesh
(但这似乎发生在我制作的任何GameObject
上
[编辑] 不!我错了!它与默认的cube
和其他默认对象
以下是我使用的代码:
if (GameObject.Find ("Hopefully a Cube") == null) {
GameObject cube = new GameObject ("Hopefully a Cube");
Mesh mesh = new Mesh ();
Vector3[] verticies = new Vector3[8];
verticies [0] = new Vector3 (0, 0, 0);
verticies [1] = new Vector3 (100, 0, 0);
verticies [2] = new Vector3 (0, 100, 0);
verticies [3] = new Vector3 (100, 100, 0);
verticies [4] = new Vector3 (0, 0, 100);
verticies [5] = new Vector3 (100, 0, 100);
verticies [6] = new Vector3 (0, 100, 100);
verticies [7] = new Vector3 (100, 100, 100);
mesh.vertices = verticies;
int[] tris = new int[36];
tris = new[] { 0, 2, 1, 2, 3, 1, 4, 2, 0, 6, 2, 4, 4, 6, 5, 6, 7, 5, 1, 3, 5, 3, 7, 5, 0, 4, 1, 4, 5, 1, 2, 6, 3, 6, 7, 3 };
mesh.triangles = tris;
mesh.RecalculateNormals ();
MeshFilter meshFilter = cube.AddComponent<MeshFilter> ();
meshFilter.mesh = mesh;
MeshRenderer meshRenderer = cube.AddComponent<MeshRenderer> ();
Texture2D texture = new Texture2D (1, 1);
texture.SetPixels (new[] { Color.blue });
meshRenderer.sharedMaterial = new Material (meshShader);
meshRenderer.sharedMaterial.mainTexture = texture;
cube.SetActive (true);
}
if (GameObject.Find ("Hopefully a Pyramid") == null) {
GameObject pyramid = new GameObject ("Hopefully a Pyramid");
Mesh mesh = new Mesh ();
Vector3[] verticies = new Vector3[5];
verticies [0] = new Vector3 (0, 0, 0);
verticies [1] = new Vector3 (100, 0, 0);
verticies [2] = new Vector3 (0, 0, 100);
verticies [3] = new Vector3 (100, 0, 100);
verticies [4] = new Vector3 (50, 100, 50);
mesh.vertices = verticies;
int[] tris = new int[18];
tris = new[] { 0, 2, 1, 2, 3, 1, 0, 4, 1, 2, 4, 0, 3, 4, 2, 3, 4, 1 };
mesh.triangles = tris;
mesh.RecalculateNormals ();
MeshFilter meshFilter = pyramid.AddComponent<MeshFilter> ();
meshFilter.mesh = mesh;
MeshRenderer meshRenderer = pyramid.AddComponent<MeshRenderer> ();
Texture2D texture = new Texture2D (1, 1);
texture.SetPixels (new[] { Color.blue });
meshRenderer.sharedMaterial = new Material (meshShader);
meshRenderer.sharedMaterial.mainTexture = texture;
pyramid.SetActive (true);
}
答案 0 :(得分:4)
网格的索引(三角形数组中的整数)顺序错误。它们需要从您看到脸部的方向顺时针方向。一个简单的提示,如果它们看起来像是wong,只需翻转三角形的2个索引。
这是你的立方体。
tris = new[] {
0, 2, 1, 2, 3, 1,
4, 2, 0, 6, 2, 4,
4, 5, 6, 6, 5, 7,
1, 3, 5, 3, 7, 5,
0, 1, 4, 4, 1, 5,
2, 6, 3, 6, 7, 3
};
如果你想知道为什么它有这么奇怪的阴影,那么用24个顶点创建一个立方体并看看差异。这是因为面上的法线取决于构成顶点的法线的法线。 (同样适用于顶点颜色和紫外线)。因此,如果您需要尖锐的边缘,与相邻面上的顶点或uv接缝不同的颜色,则需要单个顶点用于面/边(因此在一个点中有2个顶点),因为您只能在顶点上设置这些要素。