Version: 2021.2

Resources.FindObjectsOfTypeAll

切换到手册
public static T[] FindObjectsOfTypeAll ();

描述

返回所有类型为 T 的对象的列表。

此函数可以返回已加载的任何类型的 Unity 对象,包括游戏对象、预制件、材质、网格、纹理等。此函数还将列出内部对象,因此请小心处理返回的对象。

与 Object.FindObjectsOfType 不同的是,此函数还将列出禁用的对象。

using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class ExampleScript : MonoBehaviour { List<GameObject> GetAllObjectsOnlyInScene() { List<GameObject> objectsInScene = new List<GameObject>();

foreach (GameObject go in Resources.FindObjectsOfTypeAll(typeof(GameObject)) as GameObject[]) { if (!EditorUtility.IsPersistent(go.transform.root.gameObject) &amp;&amp; !(go.hideFlags == HideFlags.NotEditable || go.hideFlags == HideFlags.HideAndDontSave)) objectsInScene.Add(go); }

return objectsInScene; } }

将以 List<GameObject> 格式返回场景中的所有 GameObjects。

using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class ExampleScript : MonoBehaviour { List<GameObject> GetNonSceneObjects() { List<GameObject> objectsInScene = new List<GameObject>();

foreach (GameObject go in Resources.FindObjectsOfTypeAll(typeof(GameObject)) as GameObject[]) { if (EditorUtility.IsPersistent(go.transform.root.gameObject) &amp;&amp; !(go.hideFlags == HideFlags.NotEditable || go.hideFlags == HideFlags.HideAndDontSave)) objectsInScene.Add(go); }

return objectsInScene; } }

将返回所有在 Resources 文件夹中也是预制件的 GameObjects。


public static Object[] FindObjectsOfTypeAll (Type type);

描述

返回所有类型为 type 的对象的列表。

使用非泛型类型的该函数可以返回任何类型的已加载的 Unity 对象,包括游戏对象、预制件、材质、网格、纹理等。此外,它还会列出内部内容,因此在处理返回的对象时要小心。 与 Object.FindObjectsOfType 相反,该函数还会列出禁用的对象。

注意:该函数的运行速度非常缓慢,不建议在每帧中使用。

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;

public class ExampleScript : MonoBehaviour { List<UnityEngine.Object> GetSceneObjectsNonGeneric() { List<UnityEngine.Object> objectsInScene = new List<UnityEngine.Object>();

foreach (UnityEngine.Object go in Resources.FindObjectsOfTypeAll(typeof(UnityEngine.Object)) as UnityEngine.Object[]) { GameObject cGO = go as GameObject; if (cGO != null &amp;&amp; !EditorUtility.IsPersistent(cGO.transform.root.gameObject) &amp;&amp; !(go.hideFlags == HideFlags.NotEditable || go.hideFlags == HideFlags.HideAndDontSave)) objectsInScene.Add(go); }

return objectsInScene; } }

使用非泛型方法查找场景中的所有 gameObjects。