当数组为null时跳过它

时间:2017-03-21 19:28:31

标签: c# arrays null skip unity2d

我的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;

    }
}   

}

2 个答案:

答案 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 |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+