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