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 个顶点),因为您只能在顶点上设置这些特征。