Object.FindObjectsOfType

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

参数

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

返回

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

描述

返回所有类型为 type 的已加载的激活对象的列表。

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

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

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

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); } } }
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961