2017-08-13 8 views
-2

ここに関連コードがあります。私は、現在のスポーン場所が最後のスポーン配列内にあるかどうかを確認したい。ベクトル3がベクトル3の配列にあるかどうかをチェックする方法c#

lastSpawnsVector3の配列です。

//Generate Level 
while(cubeSpawns != 100) 
{ 
    currentSpawnLocation = new Vector3(Random.Range(-5, 5), Random.Range(-5, 5), Random.Range(-5, 5)); 
    if (currentSpawnLocation != lastSpawns) 
    { 
     GameObject cubeClone = (GameObject)Instantiate(Cubes[Random.Range(0,Cubes.Length)], transform.position + currentSpawnLocation, Quaternion.identity); 
     currentSpawnLocation = lastSpawns[cubeSpawns]; 
     cubeClone.transform.parent = CubeClones; 
     cubeSpawns = cubeSpawns + 1; 
    } 
} 
+3

このコードもコンパイルされません。あなたもこれを研究しようとしましたか(たとえば、「C#配列には検索エンジンに入力する」と入力してください)? – UnholySheep

答えて

1

あなたはネイティブArrayクラスの静的IndexOfオーバーロードを使用することができます。オブジェクトが配列内で見つかった位置を返します。オブジェクトが配列内に存在しない場合は-1を返します。

だからあなたのコードは、(あなたはもうwhileループを必要としない)このように行く必要があります。

currentSpawnLocation = new Vector3(Random.Range(-5, 5), Random.Range(-5, 5), Random.Range(-5, 5)); 
if (Array.IndexOf(lastSpawns, currentSpawnLocation) == -1) 
{ 
    // the currentSpawnlocation is not found 
    GameObject cubeClone = (GameObject)Instantiate(Cubes[Random.Range(0,Cubes.Length)], transform.position + currentSpawnLocation, Quaternion.identity); 
    cubeClone.transform.parent = CubeClones; 
    // I assume you want to store currentSpawnLocation in the array 
    // for that I use your cubeSpawns variable to keep track of where 
    // we are in the array. If you use cubeSpawns for something else, adapt accordingly 
    lastSpawns[cubeSpawns] = currentSpawnLocation; 
    cubeSpawns = cubeSpawns + 1; 
    // prevent going beyond the capacity of the array 
    // you might want to move this in front of the array assingment 
    if (cubeSpawns > lastSpawns.Length) 
    { 
     // doing this will overwrite earlier Vector3 
     // in your array 
     cubeSpawns = 0; 
    } 
} 
+0

ありがとうございます! – lukefly2

関連する問題