[英]Spawning enemies in Unity 2D
我想让我的敌人在旋转时使用“spawn”从顶部出现。
但我收到了这个错误:
IndexOutOfRangeException: 数组索引超出范围。 spawnScript.addEnemy () (在 Assets/Scripts/spawnScript.cs:21)
下面是我的脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class spawnScript : MonoBehaviour {
public Transform[] spawnPoints;
public GameObject enemy;
public float spawnTime = 5f;
public float spawnDelay = 3f;
// Use this for initialization
void Start () {
InvokeRepeating ("addEnemy", spawnDelay, spawnTime);
}
void addEnemy() {
// Instantiate a random enemy.
int spawnPointIndex = Random.Range(0, spawnPoints.Length);
Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
}
// Update is called once per frame
void Update () {
}
}
这是问题所在: public Transform[] spawnPoints;
spawnPoints
变量被声明为 public,这意味着您希望通过编辑器填充它。 你没有做到这一点,大小仍然是0 。 当大小为0
, Random.Range
将执行此Random.Range(0,0)
并返回0
。 当您将0
作为索引提供给spawnPoints
变量时,它会抛出该错误,因为spawnPoints
没有任何spawnPoints
。 您必须设置大小。
这是现在的样子:
这是它应该是什么样子:
请注意我如何将变换拖动到第二个屏幕截图中的spawnPoints
数组插槽。 如果你不这样做,预计会得到NullException
错误。
如果您不想在不设置大小的情况下出现该错误,请在使用之前检查spawnPoints.Length > 0
。
if (spawnPoints.Length > 0)
{
int spawnPointIndex = UnityEngine.Random.Range(0, spawnPoints.Length);
Instantiate(enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
}
通过将spawnPoints
public
,假定您要从编辑器设置size
。 您还可以从脚本设置size
,但首先将其设为private
变量,以免遇到问题:
void Start()
{
//Set the size to 3 then fill it up
spawnPoints = new Transform[3];
spawnPoints[0] = yourPint1;
spawnPoints[1] = yourPint2;
spawnPoints[2] = yourPint3;
}
这里的错误 - int spawnPointIndex = Random.Range(0, spawnPoints.Length);
你应该写 - Random.Range(0, spawnPoints.Length - 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.