Version: 2022.3

Object.FindObjectsOfType

切换到手册
public static Object[] FindObjectsOfType (Type type);
public static Object[] FindObjectsOfType (Type type, bool includeInactive);
public static T[] FindObjectsOfType (bool includeInactive);
public static T[] FindObjectsOfType ();

参数

type 要查找的对象类型。
includeInactive 如果为 true,则还会包括附加到非活动 GameObjects 的组件。

返回

Object[] 找到的与指定类型匹配的对象的数组。

描述

Gets a list of all loaded objects of Type type.

这不返回任何资源(如网格、纹理、预制件)或设置了 HideFlags.DontSave 的对象。 仅当 inactiveObjects 设置为 true 时,才会包括附加到非活动 GameObjects 的对象。 使用 Resources.FindObjectsOfTypeAll 可避免这些限制。

在编辑器中,这在默认情况下会搜索 Scene 视图。如果要在预制件阶段查找对象,请参阅 StageUtility API。

**注意**:此函数的运行速度非常缓慢。建议不要每帧都使用此函数。 在大多数情况下,可以改为使用单例模式。

It is recommended to use Object.FindObjectsByType instead. This replacement allows you to specify whether to sort the resulting array. FindObjectsOfType() always sorts by InstanceID, so calling FindObjectsByType(FindObjectsSortMode.InstanceID) produces identical results. If you specify not to sort the array, the function runs significantly faster, however, the order of the results can change between calls.

using UnityEngine;

// Ten GameObjects are created and have TextMesh and // CanvasRenderer components added. // When the game runs press the Space key to display the // number of TextMesh and CanvasRenderer components.

public class ScriptExample : MonoBehaviour { private const int count = 10;

void Start() { var gameObjects = new GameObject[count]; var expectedTextMeshObjects = new TextMesh[count]; var expectedCanvasObjects = new CanvasRenderer[count];

for (var i = 0; i < count; ++i) { gameObjects[i] = new GameObject(); expectedTextMeshObjects[i] = gameObjects[i].AddComponent<TextMesh>(); expectedCanvasObjects[i] = gameObjects[i].AddComponent<CanvasRenderer>(); } }

void Update() { if (Input.GetKeyDown(KeyCode.Space)) { var foundCanvasObjects = FindObjectsOfType<CanvasRenderer>(); var foundTextMeshObjects = FindObjectsOfType(typeof(TextMesh)); Debug.Log(foundCanvasObjects + " : " + foundCanvasObjects.Length); Debug.Log(foundTextMeshObjects + " : " + foundTextMeshObjects.Length); } } }