【问题标题】:Array index is out of range error数组索引超出范围错误
【发布时间】: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 的某个游戏对象上存在此组件的额外副本?

标签: c# arrays unity3d


【解决方案1】:

需要获取数组的当前长度,所以不能超出当前数组范围。

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

【讨论】:

  • 谢谢。刚刚尝试过,敌人仍然按原样产卵,但错误仍然存​​在。错误肯定来自这个脚本,所以我会更新我的答案以给出完整的脚本,看看它是否来自其他东西。
  • 应该是enemies.Length -1, max 包含在内。
  • @shadowlif 这就是我的想法,这就是为什么我认为它一定是导致问题的其他原因。我已经完成了该项目并从所有游戏对象中删除了这个脚本,将行更改为敌人。长度然后将所有内容放回原处。我现在可以肯定地确认敌人。长度完美无缺。关于将元素保留为 0 的进一步评论,我一定是在我使用它的一个场景中犯了这个错误,它给出了错误。 - 删除了上面的评论以避免混淆:)
猜你喜欢
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2017-05-06
  • 1970-01-01
相关资源
最近更新 更多