无法清除 Unity 中的游戏对象数组

can't clear array of GameObjects in Unity

有人能告诉我为什么在清除数组并再次检查后,我没有得到 length == 0 吗?

public class test : MonoBehaviour
{
    public GameObject[] allWayPoints;
    public GameObject wayPoint;

    void Start()
    {
        
        for(int i = 0; i < 10; i++)
        {
            GameObject pathPrefab = Instantiate(wayPoint, new Vector3(0, 0, 0), Quaternion.identity);
            pathPrefab.tag = "PathPoint";
        }

        allWayPoints = GameObject.FindGameObjectsWithTag("PathPoint");
        Debug.Log(allWayPoints.Length);
        
        allWayPoints = GameObject.FindGameObjectsWithTag("PathPoint");
        foreach (GameObject go in allWayPoints)
        {
            Destroy(go);
        }
        allWayPoints = new GameObject[0];
        Debug.Log(allWayPoints.Length);

        allWayPoints = GameObject.FindGameObjectsWithTag("PathPoint");
        Debug.Log(allWayPoints.Length);
    }
}

Debug.Log

Array

只有当您明确将其设置为 0 时,数组的时间长度才会为 0,正如您在日志中所见。

当你销毁一个游戏对象时,它也不会立即被删除,并且销毁一个游戏对象不会使数组变小。由于 GameObject 没有立即移除,您仍然可以从场景中找到旧的“待移除”引用。

数组是固定数量values/indexes的集合,它的长度总是与创建时一样长,因为它占用特定的一块内存,而不管它的实际内容。

请参阅此处 fiddle,只有空值的数组的长度与创建时的长度相同,即使它实际上是空的。 https://dotnetfiddle.net/VmigUO