C# Unity3D 错误:列表<int>。ToArray() 问题



我正在Unity3D中通过C#脚本构建一个复杂的网格。根据我的生成代码,我将三角形数据传递给UnityEngine.Mesh.triangles。我的三角形数据存储在一个类型为List<int>的变量中。并且CCD_ 3的类型是CCD_。所以我用了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之类的日志,表明存在溢出。

int[]不能做到这一点。

当然可以,它是int的数组,因此它支持整个范围的int

问题很可能不是int[],而是Unity网格API。

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

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

最新更新