我创建了预制件,以0, 1 ... 9
命名。
我想创建一个包含rigidbody
和collision
的数字。但是我收到以下例外:
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);
}
}
}
答案 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));
}
}