Как правильно использовать Update или Start в Unity?

В Unity я новичок и уже делал игры, и они получались, но тут не давно стало интересно, а правильно ли я все пишу? Меня интересует, как правильно использовать Update? Я делал так: для каждого объекта крепил скрипт, и прописывал ему что-то в Update, например в скрипте Coin, указывал в Update, что coin должен вращаться, а в другом скрипте, например Stack указывал, что палка должна двигаться по другому, и так ко всему, и в проекте было около 10 скриптов которые выполняют что-то в Update для отдельного объекта.

Главный вопрос:, правильно ли это? А может нужно делать по-другому? Например, выделить отдельный скрипт там где будет этот Update, инициализировать все классы в этот скрипт, и все прописать в 1 Update.

Или может нужно делать как то по-другому? Что вы посоветуете?


Ответы (1 шт):

Автор решения: Максим Фисман

Выделить отдельный скрипт там где будет этот Update, инициализировать все классы в этот скрипт, и все прописать в 1 Update.

Ух-х, мурашки по коже пробежали. Прямо фильм ужасов.


Update срабатывает автоматически каждый кадр. Каждый скрипт должен отвечать за определенные характеристики определенного объекта. Например, скрипт монетки должен содержать стоимость монетки, контроль анимации-вращения (хотя я бы это сделал анимацией), подбор монетки, когда на нее наступает игрок и т.п. Скрипт монетки не может отвечать за, например, вычисление скорости бега персонажа при двойном прыжке через 35-й пень на 4-м уровне при средней сложности.

Также и предложенный вами вариант: 1 скрипт не может отвечать за Update всех объектов, хотя бы потому, что в скрипте всех объектов есть собственные переменные, с которыми надо работать: брать значения, изменять его, - есть другие компоненты, которые надо периодически изменять...

10 скриптов для одного проекта - крайне мало. Так мало скриптов бывает только в обучающих видео на ютубе. В нормальных проектах число скриптов может начинаться с 0 и стартовать to infinity and beyond с третьей космической скоростью. Ничего страшного в том, что у вас на сцене 10 объектов со скриптов с Update, который выполняет несколько строчек кода - нет (если там, конечно, нет цикла на пару миллионов итераций).

Если в вашей игре не FPS не проседает до -10 (шутка, порогово низкий нормальный FPS - 30, а заикание наблюдается при FPS ниже 20), то нормально все. Update() в принципе предназначен для выполнения работы, которая ДОЛЖНА выполняться в каждом кадре. Хотя, как нам пишут глубокоуважаемые разработчики Unity, не в каждом скрипте Update() обязан присутствовать и требуется.

→ Ссылка