Лучший (и менее дорогой) способ найти GameObject? - PullRequest
0 голосов
/ 01 февраля 2019

У меня большое недоумение, и я надеюсь, что кто-то может дать мне несколько советов:)

Что с точки зрения производительности, какой менее дорогой способ найти объект игры?

1)

public GameObject myGO;

2)

GameObject myGO = this.transform.parent.GetChild(0).GetChild(0).gameObject;

3)

GameObject myGO = GameObject.Find("myObject")

Ответы [ 4 ]

0 голосов
/ 01 февраля 2019

Моя стратегия, чтобы избежать хранения ссылки, состоит в том, чтобы использовать родительский и дочерний метод (ваш 2 способа) (пример

https://docs.unity3d.com/ScriptReference/Transform-parent.html

https://docs.unity3d.com/ScriptReference/Transform.GetChild.html

).

Это быстро по сравнению с Find, и выне нужно хранить ссылку.

Конечно, 1 - это быстро, но гораздо менее удобно, поэтому я не всегда его использую.

PS.Если вам нужно получить справку по основной камере, есть еще лучший способ

https://docs.unity3d.com/ScriptReference/Camera-main.html
0 голосов
/ 01 февраля 2019

1 - самый быстрый, поскольку у вас уже есть ссылка в вашей переменной.Нет необходимости в вычислениях.

В 2 у вас есть несколько опорных перенаправлений, что очень быстро.У вас также есть вызовы функций для получения нулевого элемента, который также должен быть достаточно быстрым.Я бы сказал, что это второй лучший.

В 3 Unity ищет имя среди игровых объектов на сцене.Я не знаю деталей реализации - если они не выполняют какое-то хеширование, будет ряд сравнений строк.В любом случае, это похоже на самый медленный.

Тем не менее, вам не нужно беспокоиться об эффективности такого кода, если вы не выполняете сотню шагов в кадре.Больше волнуйтесь об объектах, если вы хотите сделать свою игру более эффективной.

0 голосов
/ 01 февраля 2019

Метод Find не рекомендуется не только из-за снижения производительности - основывать код на вещах, которые должны быть названы особым образом на сцене, - плохая привычка.Если по какой-либо причине имя объекта изменится, вы не сможете найти его в любой момент.

0 голосов
/ 01 февраля 2019

100%, если вы можете назначить ссылку в редакторе в начале с общедоступной переменной, это она.

Если вам нужно найти ее динамически, сохраните ссылку для использования позже, чтобы у вас было тольконайти его один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...