1

我知道通过 continue 你可以跳过脚本的某些部分,但是有没有办法用数组做同样的事情?我希望每个对象都存储在一个数组中,而不是佩戴此脚本的对象(也具有相同的标签)。

var enemies : GameObject[];

function Start(){
    seeEnemies();
}

function seeEnemies():GameObject{
    enemies = GameObject.FindGameObjectsWithTag("enemy");
}

示例:
敌人 1 有一个包含敌人 2、3、4 的数组。
敌人 2 有一个包含敌人 1,3,4 的数组。
敌人 3 有一个包含敌人 1、2、4 的数组。
敌人 4 有一个包含敌人 1、2、3 的数组。

4

2 回答 2

1

可能跳过add比简单地添加所有,然后删除对象更昂贵。

您还可以使用间接:每个对象都“知道”它是数组中的索引。迭代数组时,您会跳过“您自己的”索引:

var what_to_do = function( index, element ) {
   // do stuff with element
}
// handle all elements _before_ this
var i = 0;
for( ; i != this.index && i != elements.length; ++i ) {
  what_to_do( i, elements[i] );
}
++i; // skip this one
for( ; i < elements.length; ++i ) {
  what_to_do( i, elements[i] );
}

'do stuff' 可能被封装在一个匿名函数中,以便不必重复自己。

- 编辑 -

嗯......你甚至可以排除“跳过”功能:

function skip_ith( elements, thisindex, f ) {
   var i = 0; 
   for( ; i != thisindex && i != elements.length; ++i ) {
      f( i, elements[i] );
   }
   ++i;
   for( ; i < elements.length; ++i ) { // note: < because i may be length+1 here
      f( i, elements[i] );
   }
}

应用:

for( var i = 0; i != elements.length; ++i ) {
   skip_ith( elements, i, function( index, element ) {
      // do stuff with element
   } );
}
于 2011-04-26T10:42:45.607 回答
0
public class s_foo : MonoBehaviour {
public GameObject[] OrbitingSatellites = new GameObject[7];
public GameObject orbital1; // drag-dropped "small explosion" in Editor.

void Start() {
    OrbitingSatellites[0] = orbital1;
    Debug.Log("os = " + OrbitingSatellites[0].name); // prints "small explosion"
}

}

这是将游戏对象添加到游戏对象数组的正确方法,我的问题在别处。

于 2011-04-26T05:47:42.063 回答