📅  最后修改于: 2023-12-03 15:05:45.403000             🧑  作者: Mango
在 Unity 中,游戏对象是场景中的所有实体。获取所有游戏对象很重要,可以用于很多场景,例如对象池、自动化测试等。本文将介绍如何在 Unity 中获取所有游戏对象。
GameObject.FindObjectsOfType 方法可以获取场景中所有已实例化的游戏对象。这个方法需要一个游戏对象类型作为参数,例如:
GameObject[] allObjects = GameObject.FindObjectsOfType<GameObject>();
但是这个方法不仅会返回运行时创建的对象,还会包含 Unity 编辑器中的预制体,可能就不是你所需要的结果。
Scene.GetRootGameObjects 方法可以获取场景中所有根游戏对象。与 GameObject.FindObjectsOfType 不同的是,这个方法只会返回运行时创建的对象,可以保证结果的正确性。这个方法需要一个场景作为参数,例如:
Scene currentScene = SceneManager.GetActiveScene();
GameObject[] allObjects = currentScene.GetRootGameObjects();
除了上面两种方法,我们还可以遍历场景中所有游戏对象。这个方法可以用于自定义筛选条件,例如只获取某个特定标签的对象。这个方法需要使用 Unity 提供的 Object 类中的 FindObjectsOfTypeAll 方法,例如:
GameObject[] allObjects = (GameObject[])FindObjectsOfTypeAll(typeof(GameObject));
注意,这个方法会返回所有场景中的对象,包括未激活的对象。如果要获取激活的对象,需要筛选一遍,例如:
List<GameObject> activeObjects = new List<GameObject>();
foreach (GameObject obj in allObjects)
{
if (obj.activeInHierarchy)
{
activeObjects.Add(obj);
}
}
总之,Unity 中获取所有游戏对象有多种方法。需要根据场景和需求选择合适的方法,才能得到正确的结果。