繁体   English   中英

在 Unity 2D 中生成敌人

[英]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 当大小为0Random.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM