Я вижу, что мы можем инициализировать переменную в Awake()
или Start()
, а Awake()
будет вызываться до Start()
.
Когда мы должны инициализировать в Awake
и Start
, чтобы иметь лучшую производительность?
Я вижу, что мы можем инициализировать переменную в Awake()
или Start()
, а Awake()
будет вызываться до Start()
.
Когда мы должны инициализировать в Awake
и Start
, чтобы иметь лучшую производительность?
Обычно Awake() используется для инициализации, если определенные значения или script зависят друг от друга и будут вызывать ошибки, если один из них инициализирован слишком поздно (активные запускаются до начала игры). Awake также вызывается только один раз для каждого экземпляра script.
Позвольте мне процитировать документацию:
[...] Awake вызывается после того, как все объекты инициализированы, чтобы вы могли спокойно разговаривать с другими объектами или запрашивать их, используя, например. GameObject.FindWithTag. Каждый GameObject Awake вызывается в случайном порядке между объектами. Из-за этого вы должны использовать Awake для настройки ссылок между скриптами и использовать Start() для передачи любой информации взад и вперед. Awake всегда вызывается перед любыми функциями Start. Это позволяет вам заказывать инициализацию скриптов. Пробуждение не может действовать как сопрограмма.
и около Start():
Начало вызывается в кадре, когда script включен непосредственно перед методов Update вызывается в первый раз.
Как и функция Awake, Start вызывается ровно один раз в жизни из script. Тем не менее, Awake вызывается, когда объект scriptинициализируется, независимо от того, включен или нет параметр script. Start может не вызываться в том же фрейме, что и Awake, если script не является разрешено во время инициализации.
Если последняя часть имеет большое значение
Чтобы задать вам вопрос:
Если script включен НЕ в начале вашей игры, и вам не нужны инициализируемые переменные, start будет экономить производительность, поскольку awake() будет называться независимо...
каждая переменная будет инициализирована в самом начале. По крайней мере, это логическое предположение, которое я делаю.
Этот вопрос хорошо описан в официальной документации (Awake
и Start
).
В этом разделе описывается, почему вам могут понадобиться две функции:
Функция
Awake
вызывается для всех объектов в сцене до вызывается функцияStart
. Этот факт полезен в тех случаях, когда object. Код инициализации должен полагаться на объект B уже инициализируется; B инициализация должна выполняться вAwake
, тогда как A должно быть сделано вStart
.
Разница между Awake
и Start
заключается в том, что Start
вызывается только тогда, когда включен script .
Эти две функции вызываются перед первым методом Update
, и между ними нет разницы в производительности. Я бы сказал, что Awake
используется для инициализации всех объектов (например, конструктора), а Start
используется для связывания объектов или чего-то до начала игры.
Awake является эквивалентом ctor. Он вызывается, когда MonoBehaviour создается до любого другого метода.
Запуск запускается при первом запуске MonoBehaviour. Это может быть сразу после Пробуждения или долгого времени. Это позволяет выполнять действия, связанные с текущим состоянием приложения или объектов.
Например, вы создаете врага, в Awake вы помещаете все, что является базовой инициализацией. Затем враг деактивируется в конце Пробуждения. Позже враг будет активирован, но вы хотите сделать его красным, если у игрока есть определенное оружие, а затем вы сделаете это в Start.
OnEnable аналогичен Start, но происходит при каждом SetActive (true) и при запуске, если включен. Это может быть кандидатом для вашего врага, желающего изменить цвет над уровнем, основанным на игроке magna, например.