我的2D游戏中的对象位于数组列表中。这些对象实例化游戏中的其他对象。实例化的是基于随机的。但是,这些可能会在游戏过程中被破坏。代码仍然试图寻找被破坏的转换,所以我告诉它只有在数组不是空时才从数组中实例化,修复错误信息。仍然,行为仍然存在。由于其中一个数组每隔几秒就生成一个gameObject,它仍然可以决定从一个null的数组中生成。当它随机选择一个为null的数组时,有一段时间段游戏必须坐下来等待某事发生,这当然是不可接受的。我怎么告诉游戏当数组为空时,跳过它并转到下一个数组,以便摆脱游戏中的等待时间?我也知道虚空不会返回任何东西。它只是脚本末尾的占位符,因为我不能输入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;
}
}
}
答案 0 :(得分:0)
您可以在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);
}
你有这个回报的地方:
if (spawns[spawnIndex] = null)
只需拥有=
而非==
,您就不会验证其是否为null,而是将此spawns[spawnIndex]
设为空值。
答案 1 :(得分:0)
不是将数组位置设置为null,而是将它们填入最后一项并跟踪数组中的项目数。
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 | | | | | | |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+