UnityScript将Vector3数组视为Collections.Array

时间:2015-07-03 22:55:49

标签: arrays collections unity3d unityscript

我正在尝试从头开始创建一个网格。我尝试使用.Push()动态增加顶点数组的大小。我也试过

m.vertices.size++;
m.vertices[m.vertices.size-1] = heightMapp;

手动增加大小,但显然大小不是成员,我知道.length是只读的。那么,我如何将数组视为Collections.Array或如何手动增加大小?

1 个答案:

答案 0 :(得分:1)

您无法在Array中修改Unityscript(也称为内置数组)的大小。这是出于性能原因。你可以阅读它here

Mesh.vertices是一个数组,因此您无法直接修改它。你能做的是:

  • 使用您想要的新尺寸创建新的built in array,在您的情况下,它将是m.vertices.length+1
  • 将值从m.vertices复制到新数组
  • 使用m.vertices
  • 从新数组中分配ToBuiltin个值

代码如下:

var tmpArray = new Array();

for( var vert in m.vertices )
{
 tmpArray.Push( vert );
}

m.vertices = tmpArray.ToBuiltin(Vector3) as Vector3[];

注意:这样做可能很昂贵,因此Unity使用内置数组作为网格中的顶点是有原因的,所以只有在没有其他选择时才这样做。尝试在一个步骤中添加尽可能多的顶点,并尽量避免逐个添加它们。