【发布时间】:2015-09-25 18:50:31
【问题描述】:
我正在使用此代码从数组中生成一个随机对象:
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.
我有什么不同的方法吗?或者我应该为每个场景编写一个新脚本?
【问题讨论】:
-
你在哪里初始化敌人数组?
-
@JoaoFSA Unity 有一个 Inspector,您可以在那里初始化公共变量。
-
不确定在 Unity 中是否可行,但您可以使用“List
”代替数组吗? -
@PoweredByOrange 数组更好,因为他不会在运行时添加新对象。
-
您确定
enemies数组有任何元素吗?如果它是空的,那么现在随机数将是0,它会尝试访问它。也许在您没有填写enemies的某个游戏对象上存在此组件的额外副本?