Пятница, 19 Апреля 2024, 14:26

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Порядок запуска скриптов (как оно работает?)
Порядок запуска скриптов
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
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Порядок запуска скриптов (как оно работает?)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг