[英]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等日志,说明有溢出。
但
int[]
不能那样做。
当然它可以是一个int
数组,因此它支持整个int
范围。
问题很可能不在于int[]
,而可能在于 Unity 网格 API。
默认情况下,Unity 中的Mesh
最多可以有65535
个顶点。 因此, triangles
也不会存储任何高于此的值。
如果你想有更多的顶点,你需要将Mesh.indexFormat
更改为IndexFormat.UInt32
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.