Почему бы не fini sh все функции в Update () функционировать в единстве - PullRequest
0 голосов
/ 08 марта 2020

void Update () может выполнять функции за 1 кадр. Таким образом, в сценарии ex вроде void OnTriggerEnter(){}. почему бы не поместить его в функцию update (). Я знаю, что здесь есть какое-то недопонимание, но я просто не могу объяснить это себе. Кроме того, это только void Update(), void Start(){}, которые функционируют в единстве. Включая некоторые функции, такие как void OnTriggerEnter может также функционировать в единстве, поскольку это встроенные функции. Как насчет тех функций, которые написаны нами как public void SwitchAvatar(). Может ли она функционировать, если она не указана внутри void Update(){}. Я знаю, что вопросы, приведенные выше, могут звучать глупо, но не знаю, почему я не могу сказать ответы. Всю вашу помощь очень ценится. Спасибо!

1 Ответ

2 голосов
/ 08 марта 2020

Хорошо, давайте откроем ящик Пандоры о методах волхвов c в Unity.

Во-первых, есть два типа классов, от которых вы можете наследовать, для доступа к методам магов c: MonoBehaviour и ScriptableObject. Оба они предлагают разные вещи, и последний в основном используется для сериализации данных вне сцены. Кроме того, ScriptableObject имеет намного меньше магических c методов, чем MonoBehaviour.

Второе: у MonoBehaviour есть жизненный цикл. От того, где вы находитесь в этом жизненном цикле, зависит, какие методы вызываются механизмом.

На следующем графике c показан весь жизненный цикл MonoBehaviour: (Источник: Unity - Manual: Порядок выполнения для функций событий )

Как видите, объект создается и вызывается Awake. Перед первым вызовом Update механизм вызывает метод Start. Существует разница между Awake и Start: Awake сопоставима с конструктором. Он вызывается без каких-либо внешних гарантий (как и другие компоненты вашего GameObject). Когда вызывается Start, все остальные компоненты объекта инициализируются и могут быть доступны с помощью вызова GetComponent.

Теперь Update, FixedUpdate и всех других событий:
Unity имеет два отдельных цикла, которые он повторяет. Один для физики и один для всего остального. Поскольку вычисление физики стоит дорого и требует точности, оно вызывается с фиксированными, четкими временными шагами. Вы действительно можете установить их в настройках проекта на вкладке «Время» .
Теперь, если вы хотите изменить что-либо, связанное с физикой (например, скорость твердого тела), вы должны сделать это в FixedUpdate, потому что он работает на том же временном шаге, что и физический движок (PhysX или Box2D, в зависимости от того, как вы используете коллайдеры).
С другой стороны, обновление выполняется как можно чаще. Текущее временное расстояние между двумя вызовами Обновления можно узнать, набрав Time.deltaTime, то есть время, которое проходит между двумя вызовами Update. Обратите внимание, что Time.fixedDeltaTime всегда одинаково, так как это время между двумя физическими вызовами.
Другие методы событий вызываются как ответы либо на внутреннее обновление редактора l oop, либо на рендеринг l oop, либо на физика l oop. Всякий раз, когда объект сталкивается в физическом расчете, вызывается OnCollisionEnter. Обратите внимание, что это не может произойти из Update, потому что, как мы знаем, Update не используется для вычисления физики.


Хорошо, тл; dr:
Start и Update - не единственные методы, которые существуют в жизненном цикле MonoBehaviour, их много, и у каждого есть своя цель. Физика рассчитывается в другом масштабе времени при вызове метода Update и, следовательно, не может быть частью Update.


И одна вещь, которую нужно отнять: вы должны действительно прочитать руководство по игре двигатель, который вы используете. Есть много вещей, которые вы должны знать, когда пишете код для приложения реального времени, и если вы строите на существующем игровом движке, вы должны регулярно проверять документы по этому. В частности, документация по Unity очень хорошо читается как для кода, так и для использования редактором.

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