1

continue を使用するとスクリプトの特定の部分をスキップできることは知っていますが、配列で同じことを行う方法はありますか? すべてのオブジェクトが配列に格納されることを望みますが、このスクリプトを着用するオブジェクト (同じタグを持つ) は格納されません。

var enemies : GameObject[];

function Start(){
    seeEnemies();
}

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

例:
敵 1 には、敵 2、3、4 を持つ配列があります。
Enemy 2 には Enemy 1,3,4 を持つ配列があります。
敵 3 には、敵 1、2、4 を持つ配列があります。
Enemy 4 には、Enemy 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 に答える