无法清除 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
有人能告诉我为什么在清除数组并再次检查后,我没有得到 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