Unity 6.3
0 онлайн 58 гостей 3 в системе
Вход

GameObject.Find

Declaration

public static GameObject Find(string name);

Параметры

Параметр Описание
имя Имя или иерархический путь к GameObject для поиска.

Описание

Находит и возвращает GameObject с указанным именем или путем к иерархии.

Возвращает только активный GameObjects. Возвращает null, если не существует GameObject с name. Если name содержит символ /, он рассматривается как путь к GameObject в окне Hierarchy. Если есть несколько GameObjects с одинаковым именем, рекомендуется не использовать этот метод.

Если путь начинается с /, первый объект в пути не должен иметь родителей в представлении Hierarchy. Пути, которые не начинаются с /, могут начинаться от дочернего объекта GameObject. Например, если есть GameObject с именем Рука, который является дочерним объектом Arm, который является дочерним объектом Monster, вы можете найти его с помощью /Monster/Arm/Hand или Arm/Hand, но не /Arm/Hand.

GameObject.Find вызывает значительное снижение производительности в масштабе и не рекомендуется для кода с критической производительностью, особенно в MonoBehaviour.Update. Find ищет всю сцену, и если игра работает с несколькими сценами, она ищет все их. Поиск линейный, проверяя каждый GameObject по одному и, в случае пути, пересекая иерархию. Результат не кэшируется автоматически, и каждый вызов выполняет полный поиск снова.

Чем больше GameObjects у вас есть и чем чаще вы вызываете GameObject.Find, тем больше влияние на производительность вашего приложения. Вместо этого кэшируйте результат в членской переменной при запуске или используйте GameObject.FindWithTag.

Для поиска дочернего GameObject, зачастую предпочтительнее использовать Transform.Find, который ищет только дочерей конкретного преобразования, а не всю сцену.

using UnityEngine;
using System.Collections;

// This returns the GameObject named Hand in one of the Scenes.

public class ExampleClass : MonoBehaviour { public GameObject hand;

void Example() { // This returns the GameObject named Hand. hand = GameObject.Find("Hand");

// This returns the GameObject named Hand. // Hand must not have a parent in the Hierarchy view. hand = GameObject.Find("/Hand");

// This returns the GameObject named Hand, // which is a child of Arm > Monster. // Monster must not have a parent in the Hierarchy view. hand = GameObject.Find("/Monster/Arm/Hand");

// This returns the GameObject named Hand, // which is a child of Arm > Monster. // Monster can have a parent in the Hierarchy view. hand = GameObject.Find("Monster/Arm/Hand"); } }

GameObject.Find полезна для автоматического соединения ссылок на другие объекты во время загрузки; например, внутри MonoBehaviour.Awake или MonoBehaviour.Start.

Общей схемой является назначение GameObject переменной внутри MonoBehaviour.Start, и использование переменной в MonoBehaviour.Update.

using UnityEngine;
using System.Collections;

// Find the GameObject named Hand and rotate it every frame

public class ExampleClass : MonoBehaviour { private GameObject hand;

void Start() { hand = GameObject.Find("/Monster/Arm/Hand"); }

void Update() { hand.transform.Rotate(0, 100 * Time.deltaTime, 0); } }

Дополнительные ресурсы: GameObject.FindGameObjectsWithTag