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