数组索引超出范围?

时间:2015-04-08 16:43:04

标签: c# arrays unity3d

我创建了预制件,以0, 1 ... 9命名。

我想创建一个包含rigidbodycollision的数字。但是我收到以下例外:

  

IndexOutOfRangeException:数组索引超出范围。   (wrapper stelemref)对象:stelemref(object,intptr,object)   Spawn_Score.Start()(在Assets / Spawn_Score.cs:17)

代码:

using UnityEngine;
using System.Collections;

public class Spawn_Score : MonoBehaviour {

  private Vector3 startPosition;
  private Quaternion startRotation;

  public GameObject[] number_object;

  public int position;
  public int count;

  // Use this for initialization
  void Start () {
    for (int i = 0; i < 9; i++) {
        number_object [i] = (GameObject)Resources.Load (i.ToString());
    }
    GenerateScore ();
  }

  // Update is called once per frame
  void Update () {

  }

  void GenerateScore() {
    startRotation = transform.rotation;
    count = PlayerPrefs.GetInt ("PlayerScore").ToString ().Length;
    for (int i = 1; i < count; i++) {
        //int number;
        startPosition = new Vector3 (2f*i, 5.6f, 0);
        //number = (int)PlayerPrefs.GetInt("PlayerScore").ToString()[i];
        Instantiate (number_object[1], startPosition, startRotation);
    }
  }
}

1 个答案:

答案 0 :(得分:0)

你应该为公共GameObject [] number_object放置虚拟占位符;在你的编辑器中。您无法在不知道大小的情况下动态生成。您在初始化之前动态尝试填充和调整[]。它不是一个堆栈,因为你不能即时推送和弹出东西。我放了一个假的预制物体(确切地说是9个),同样的一个很好。这样你就可以分配9个对象,并且大小将是一致的,你可以随时填充更改number_object [i]!

创建一个dummy_prefab,并将Unity中的GameObject数组调整为9,然后选择dummy_prefab作为每个的相同值。它们将是占位符,如果它是相同或不同的随机GameObject类型并不重要!

在UnityScript中,我在游戏中做了类似的事情。请注意,这不是C#而是JS。但对于LevelPieces和LevelPiecesXPosition,我必须提前在编辑器中调整它的大小。在我这样做之前我遇到了相同的数组错误:

public var LevelPieces: GameObject[];
public var LevelPiecesXPosition: float[];

function Start {

  for (var x:int=0;x < LevelPieces.Length;x++) {
      var temp:GameObject = Instantiate(LevelPieces[x], Vector3(LevelPiecesXPosition[x],0,0), Quaternion.Euler(0,0,0));
  }

}