为空时跳过数组

skipping an array when it is null

我的 2d 游戏中有数组列表中的对象。这些对象实例化游戏中的其他对象。实例化哪些是基于随机的。但是,这些可能会在游戏过程中被破坏。代码仍然试图寻找被破坏的 Transform,所以我告诉它只在数组不为 null 时从数组实例化,修复错误消息。尽管如此,这种行为仍然存在。由于其中一个数组每隔设定的秒数生成一个游戏对象,它仍然可以决定从一个空数组生成。当它随机选择一个为 null 的数组时,有一个时间段让游戏不得不坐等事情发生,这当然是不能接受的。我如何告诉游戏当一个数组为空时,跳过它并转到下一个数组,以摆脱游戏中的等待时间?我也知道 void 没有 return 任何东西。它只是脚本末尾的占位符,因为我不能输入 break 或 continue,因为它不是 for 循环。我之前发布了这个,一旦错误消息消失,我认为它就结束了。很抱歉第二次发帖。提前致谢。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Text;


public class podControl : MonoBehaviour {


public Transform [] spawns;
public float spawnTime = 6f;
public float secondSpawnTime = 3f;      
public GameObject podPrefab;



void Start ()
{

    InvokeRepeating ("landingPod", spawnTime, secondSpawnTime);

}



void landingPod ()
{

    int spawnIndex = Random.Range (0, spawns.Length);

    if (spawns[spawnIndex] != null) {

        Instantiate (podPrefab, spawns [spawnIndex].position, spawns [spawnIndex].rotation); 

    }
    else {
        if (spawns [spawnIndex] = null)
            return;

    }
}   

}

您可以在 Instantiate 之前继续寻找有效的产卵:

void landingPod()
{

    int spawnIndex = Random.Range(0, spawns.Length);

    while(spawns[spawnIndex] == null)
    {
        spawnIndex = Random.Range(0, spawns.Length);
    }

    Instantiate(podPrefab, spawns[spawnIndex].position, spawns[spawnIndex].rotation);

}

你在做 return 的地方有这个:

if (spawns[spawnIndex] = null)

通过仅使用 = 而不是 == 你不是在验证它是否为 null 而是给这个 spawns[spawnIndex] 空值。

不要将数组位置设置为空,而是用最后一项填充它们并跟踪数组中的项目计数。

public Transform [] spawns;
private int spawnsCount;

// Index must be in the range [0 ... spawnsCount - 1] and spawnsCount > 0.
public DeleteSpawnAt(int index)
{
    spawnsCount--;
    spawns[index] = spawns[spawnsCount];
    spawns[spawnsCount] = null;
}

在 0 到 spawnsCount - 1 的范围内,您将始终拥有非空转换。所有 null 条目都将位于数组的末尾。

然后用

创建一个索引
int spawnIndex = Random.Range (0, spawnsCount);

删除"D":

              +-----------------------+
              |                       |
              V                       |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| A | B | C | D | E | F | G | H | I | J |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                                    |<--|
                                    spawnCount--

之后:

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| A | B | C | J | E | F | G | H | I |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+