2015-09-25 338 views
0

的我正在使用此代碼從一個陣列產生一個隨機對象:數組索引超出範圍錯誤

using UnityEngine; 
using System.Collections; 

public class enemySpawner : MonoBehaviour { 

    public GameObject[] enemies; 
    int enemyNo; 
    public float maxPos = 6.9f; 
    public float delayTimer = 0.75f; 
    float timer; 

    void Start() { 
     timer = delayTimer; 
    } 

    void Update() { 

     timer -= Time.deltaTime; 

     if (timer <= 0) { 

      Vector3 enemyPos = new Vector3 (transform.position.x, Random.Range (5.0f, -5.5f), transform.position.z); 

      //enemyNo = Random.Range (0,8);  
      enemyNo = Random.Range (0, enemies.Length); 

      Instantiate (enemies[enemyNo], enemyPos, transform.rotation); 
      timer = delayTimer; 
     } 
    } 
}  

的問題是我想做的事情在不同的場景一樣的東西。每個場景都有針對陣列的不同量的對象(在檢查器中設置),這樣因爲他們不都是一樣的,我得到這個錯誤:

IndexOutOfRangeException: Array index is out of range. 

有沒有辦法爲我做到這一點不同?或者我應該爲每個場景編寫一個新腳本?

+1

你在初始化敵人數組? – JoaoFSA

+0

@JoaoFSA Unity有一個Inspector,你可以初始化公共變量。 – DogeAmazed

+0

不知道在Unity中是否可以使用,但是可以使用「列表」而不是Array嗎? – PoweredByOrange

回答

3

您需要獲取數組的當前長度,以便您不能脫離當前數組範圍。

enemyNo = Random.Range (0, enemies.Length) 
+0

謝謝。剛剛嘗試過這樣,敵人依然在產卵,但錯誤依然存在。錯誤肯定來自這個腳本,所以我會更新我的答案,讓完整的腳本看看它是否來自其他東西。 – JGrn84

+1

它應該是'enemies.Length -1',max是包含性的。 –

+1

@shadowlif這就是我的想法,這就是爲什麼我認爲它一定是別的原因造成的問題。我已經完成了該項目,並從所有遊戲對象中刪除了該腳本,並將其更改爲敵人。然後將所有內容都放回原位。我現在可以肯定地確認敵人。長期完美的作品。還有一個關於將元素保留爲0的進一步註釋,我必須在我使用它的其中一個場景中犯了錯誤。 - 刪除了上面的評論,以保存混亂:) – JGrn84