C# Unity3D Error: List<int>.ToArray() problem

C# Unity3D Error: List<int>.ToArray() problem

我正在 Unity3D 中通过 C# 脚本构建一个复杂的网格。按照生成代码,我将三角形数据传递给 UnityEngine.Mesh.triangles。我的三角形数据存储在类型为 List<int> 的变量中。 UnityEngine.Mesh.triangles 的类型是 int[]。所以我用了List<int>.ToArray()的方法来转换。但是在转换之后,UnityEngine.Mesh.triangles(int[]) 中的一些项目与我的三角形数据(List<int>) 不相同。更具体地说,我发现 List<int> 类型的变量可以存储大于 65535 的数字,但 int[] 不能那样做。

代码:

List<int> ts = new List<int>();
//generation codes
mesh.triangles = ts.ToArray();

然后我使用这段代码在 Unity 中对其进行测试:

for (int i = 0; i < mesh.triangles.Length; i++)
            if (mesh.triangles[i] != ts[i]) Debug.Log(mesh.triangles[i].ToString() + " ≠ " + ts[i].ToString()); 

然后得到0≠65536这样的日志,说明溢出了

but int[] can not do that.

当然可以它是一个int的数组所以它支持int的整个范围。

问题很可能与 int[] 无关,而可能与 Unity 网格有关 API。

默认情况下,Unity 中的 Mesh 最多可以有 65535 个顶点。因此 triangles 也不会存储任何高于该值的值。

如果你想拥有更多的顶点,你需要改变 Mesh.indexFormat to IndexFormat.UInt32