繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM