Unity 不渲染我的网格的某些部分以尝试使其他部分可见
Unity Not Rendering Some Parts of my Mesh to Try to Make Other Parts Visible
我在代码 中创建了自定义 mesh
(但这似乎发生在我创建的任何 GameObject
上) 并且当我在游戏或在编辑器中它会让一些面孔消失,这样我就可以更清楚地看到它。我能理解这会有什么用,但它不仅对游戏玩法而且对项目工作来说都很烦人。可能只有一个框我必须取消选中,但我不知道那是什么。我提供了一些屏幕截图(第一个是游戏中的,第二个是编辑器中的。网格应该是一个完整的金字塔形状)。我的立方体网格有 12 个三角形、8 个顶点并且没有 uv,而默认网格有 24 个顶点、12 个三角形以及 uv 和 uv2,仅供参考。
这是我的相机设置:
[编辑] 不!我错了!它与默认 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);
}
您的网格的索引(三角形数组中的整数)顺序错误。它们需要从您看脸的方向顺时针旋转。一个简单的提示,如果它们出现 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 个顶点创建一个立方体并查看差异。这是因为脸上的法线取决于构成它的顶点的法线。 (同样适用于顶点颜色和 uvs)。因此,如果您想要锋利的边缘、相邻面上顶点的不同颜色或 uv 接缝,您将需要 faces/edges 的单独顶点(因此一个点有 2 个顶点),因为您只能在顶点上设置这些特征。
我在代码 中创建了自定义 并且当我在游戏或在编辑器中它会让一些面孔消失,这样我就可以更清楚地看到它。我能理解这会有什么用,但它不仅对游戏玩法而且对项目工作来说都很烦人。可能只有一个框我必须取消选中,但我不知道那是什么。我提供了一些屏幕截图(第一个是游戏中的,第二个是编辑器中的。网格应该是一个完整的金字塔形状)。我的立方体网格有 12 个三角形、8 个顶点并且没有 uv,而默认网格有 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);
}
您的网格的索引(三角形数组中的整数)顺序错误。它们需要从您看脸的方向顺时针旋转。一个简单的提示,如果它们出现 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 个顶点创建一个立方体并查看差异。这是因为脸上的法线取决于构成它的顶点的法线。 (同样适用于顶点颜色和 uvs)。因此,如果您想要锋利的边缘、相邻面上顶点的不同颜色或 uv 接缝,您将需要 faces/edges 的单独顶点(因此一个点有 2 个顶点),因为您只能在顶点上设置这些特征。