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
我正在 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