2017-02-26 3 views
0

Dies ist mein Lawinenskript, das in C# geschrieben wurde Das Skript sollte Objekte zufällig in der Szene erstellen.Unity3d Skriptfehler C# IndexOutOfRangeException: Array-Index liegt außerhalb des Bereichs

Das Problem ist, dass ich diesen Fehler zur Laufzeit bekomme.

IndexOutOfRangeException: Array index is out of range. 
CreateEasterEggs.MakeThingToSpawn() (at Assets/CreateEasterEggs.cs:52) 
CreateEasterEggs.Update() (at Assets/CreateEasterEggs.cs:28) 

nicht sicher, was ich falsch gemacht habe, zu denken, es ist etwas mit dem Spiel-Objekt zu tun?

Vielen Dank.


using UnityEngine; 
using System.Collections; 

public class CreateEasterEggs : MonoBehaviour 
{ 
    public float secondsBetweenSpawning = 0.1f; 
    public float xMinRange = -25.0f; 
    public float xMaxRange = 25.0f; 
    public float yMinRange = -5.0f; 
    public float yMaxRange = 0.0f; 
    public float zMinRange = -25.0f; 
    public float zMaxRange = 25.0f; 
    public GameObject[] spawnObjects; // what prefabs to spawn 

    private float nextSpawnTime; 

    void Start() 
    { 
     // determine when to spawn the next object 
     nextSpawnTime = Time.time+secondsBetweenSpawning; 
    } 

    void Update() 
    { 
     // if time to spawn a new game object 
     if (Time.time >= nextSpawnTime) { 
      // Spawn the game object through function below 
      MakeThingToSpawn(); 

      // determine the next time to spawn the object 
      nextSpawnTime = Time.time+secondsBetweenSpawning; 
     } 
    } 

    void MakeThingToSpawn() 
     { 
      //Start the vector at an invalid position 
      Vector3 spawnPosition = new Vector3(0, 0, 0); 

      //while we are not in the right range, continually regenerate the position 
      while ((spawnPosition.z < 4 && spawnPosition.z > -4) || (spawnPosition.x < 4 && spawnPosition.x > -4)) 
      { 
       spawnPosition.x = Random.Range (xMinRange, xMaxRange); 
       spawnPosition.y = Random.Range (yMinRange, yMaxRange); 
       spawnPosition.z = Random.Range (zMinRange, zMaxRange); 
      } 

      // determine which object to spawn 
      int objectToSpawn = Random.Range (0, spawnObjects.Length); 

      // actually spawn the game object 
       GameObject spawnedObject = Instantiate (spawnObjects [objectToSpawn], spawnPosition, transform.rotation) as GameObject; 

      // make the parent the spawner so hierarchy doesn't get super messy 
      spawnedObject.transform.parent = gameObject.transform; 
     } 
} 
+1

Das einzige, was Rückkehr werde ich sehen kann, dass kann dazu führen, es ist, wenn die spawnObjects Array leer ist. Hast du GameObjects zum Array im Inspektor hinzugefügt? Sonst kannst du objectToSpawn drucken und sehen, was gedruckt wird und von dort gehen. –

+0

@JohanLindkvist; -/opps ja das war es, danke! Mach es zur Antwort und ich werde es akzeptieren. – Dano007

Antwort

2

IndexOutOfRange bedeutet, dass Sie auf ein Element eines Arrays zuzugreifen versucht, der nicht existiert.

In Ihrem Fall, wie Sie es tun mit Random.Range (0, spawnObjects.Length); Dann ist der einzige mögliche Fall, dass Ihr Array leer ist.

Versuchen Sie Debug.Log(spawnObjects.Length): vor dem Instantiate und Sie werden sehen, dass Ihr Array von Gameobjects tatsächlich leer ist, wie es 0.

Verwandte Themen