Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当数组为空时跳过该数组_C#_Arrays_Null_Skip_Unity2d - Fatal编程技术网

C# 当数组为空时跳过该数组

C# 当数组为空时跳过该数组,c#,arrays,null,skip,unity2d,C#,Arrays,Null,Skip,Unity2d,我的2d游戏中有一个数组列表中的对象。这些对象实例化游戏中的其他对象。实例化哪些是基于随机的。然而,这些可能会在游戏中被破坏。代码仍然试图查找已破坏的转换,因此我告诉它仅在数组不为null时从数组实例化,从而修复错误消息。不过,这种行为仍然存在。当其中一个数组每隔设定的秒数生成一个游戏对象时,它仍然可以决定从空数组生成。当它随机选择一个空数组时,游戏会有一段时间必须坐下来等待发生什么,这当然是不可接受的。我如何告诉游戏,当一个数组为空时,跳过它并转到下一个数组,以摆脱游戏中的等待期?我也知道vo

我的2d游戏中有一个数组列表中的对象。这些对象实例化游戏中的其他对象。实例化哪些是基于随机的。然而,这些可能会在游戏中被破坏。代码仍然试图查找已破坏的转换,因此我告诉它仅在数组不为null时从数组实例化,从而修复错误消息。不过,这种行为仍然存在。当其中一个数组每隔设定的秒数生成一个游戏对象时,它仍然可以决定从空数组生成。当它随机选择一个空数组时,游戏会有一段时间必须坐下来等待发生什么,这当然是不可接受的。我如何告诉游戏,当一个数组为空时,跳过它并转到下一个数组,以摆脱游戏中的等待期?我也知道void不会返回任何东西。它只是脚本末尾的一个占位符,因为我不能键入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;

    }
}   

}

您只需在实例化它之前继续查找有效的繁殖:

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,而是给这个
生成[spawndex]
空值。

而不是将数组位置设置为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到SpawnScont-1的范围内,您将始终具有非空转换。所有
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;
}
然后用

int spawnIndex = Random.Range (0, spawnsCount);

删除“D”:


好了,现在可以了。我不知道您可以将==应用于null,所以我从未想到过。非常感谢。不客气,是的,就像您通过执行
验证它是否为空一样=
您可以使用
==
执行相反的操作@JoeClark@JoeClark如果这个或任何答案已经解决了你的问题,请考虑点击复选标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这么做。当然我很乐意这么做。谢谢你给我看绳子,哈哈
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| A | B | C | J | E | F | G | H | I |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+