Порядок запуска скриптов
|
|
alexsilent | Дата: Вторник, 28 Января 2020, 09:33 | Сообщение # 1 |
почти ветеран
Сейчас нет на сайте
| Хочу поменьше использовать Script Execution Order функцию, мне кажется если я там много скриптов повешу, то оно будет запутаннее работать, но это не точно, но на всякий случай избегаю лишний раз. И в связи с этим появился вопрос:
Если я запущу объекты в таком порядке:
Код using System.Collections; using System.Collections.Generic; using UnityEngine;
public class PreInit : MonoBehaviour { // Runs before a scene gets loaded [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] public static void LoadMain() { // init/create global and system objects/scripts GameObject.Instantiate(Resources.Load("Game")); GameObject.Instantiate(Resources.Load("HUDCamera")); } }
то Awake у них будет работать правильно, то есть скрипт у объекта Game пробудиться раньше, чем у HUDCamera. Но как будут работать Start, FixedUpdate и Update функции? Будут ли они в таком же порядке работать, то есть вначале всегда обязательно будет скрипт Game читаться, а потом всегда без исключений HUDCamera?
То есть мне нужен такой порядок запуска функций:
Это можно потестить, но я встречал такой феномен в других своих кодах, когда долго тестишь порядок работы скриптов в юнити, и всё нормально кажется, а потом вдруг однажды скрипт срабатывает не в том порядке, это происходит как-то хаотично, если не использовать Script Execution Order, не всегда понимаю отчего вдруг скрипты стали работать в хаотичном порядке. Или лучше всё-таки стоит использовать всегда Script Execution Order функцию, даже если 50-100 скриптов придётся туда запихать?
Сообщение отредактировал alexsilent - Вторник, 28 Января 2020, 09:52 |
|
| |
drcrack | Дата: Вторник, 28 Января 2020, 10:56 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| по дефолту порядок Update не определен и может меняться от запуска к запуску, полагаться на него нельзя
Цитата Или лучше всё-таки стоит использовать всегда Script Execution Order функцию, даже если 50-100 скриптов придётся туда запихать? КАК, епт КАК 50-100 (СТО!) скриптов могут полагаться на Update друг друга?! это че за игра такая? лучшее что можно сделать в такой ситуации это удалить проект, закрыть ноутбук, пойти в ближайший KFC и обменять его на ведро крылышек и большую колу.
Сообщение отредактировал drcrack - Вторник, 28 Января 2020, 10:58 |
|
| |
alexsilent | Дата: Вторник, 28 Января 2020, 11:40 | Сообщение # 3 |
почти ветеран
Сейчас нет на сайте
| drcrack, лол) я просто с нуля архитектуру переписываю, с JS на С# , как раз думаю, как улучшить её, судя по комменту лучше не увлекаться большим количеством скриптов, у меня в прошлой игре было примерно 150 скриптов) Плюс мне тут только что посоветовали вообще не использовать Script Execution Order, подумываю больше не использовать системные команды типа Awake Start Update и FixedUpdate для важных скриптов, и возможно буду вызывать лишь из одного глобального скрипта. Переназвав эти переменные в Awaker, Starter, Updater, FixedUpdater, и из глобального скрипта для меня в нужном порядке вызывать эти функции, вместо автоматического вызова. Пока ещё не решил точно, может по другому сделаю, но хочу в этот раз сделать всё намного лучше, чем мой прошлый вариант. Учесть все подводные камни, что раньше не учёл.
Сообщение отредактировал alexsilent - Вторник, 28 Января 2020, 11:49 |
|
| |