В этом разделе указаны названия штатных методов в для скриптов в C#, а также условия при которых данные методы сработают:
Редактор
- void Reset(): Reset (сброс) вызывается для инициализации свойств скрипта, когда он только присоединяется к объекту и тогда, когда используется команда Reset.
Первая загрузка сцены
Эти функции вызываются при запуске сцены (один раз для каждого объекта на сцене).
- void Awake:() Эта функция всегда вызывается до любых функций Start и также после того, как префаб был вызван в сцену (если GameObject неактивен на момент старта, Awake не будет вызван, пока GameObject не будет активирован, или функция в каком-нибудь прикреплённом скрипте не вызовет Awake).
- void OnEnable(): (вызывается только если объект активен): Эта функция вызывается сразу после включения объекта. Это происходит при создании образца MonoBehaviour, например, при загрузке уровня или был вызван GameObject с компонентом скрипта.
- void OnLevelWasLoaded(): Эта функция выполняется для информирования игры о том, что загружен новый уровень.
Учтите, что для объектов, добавленных в сцену сразу, функции Awake и OnEnable для всех скриптов будут вызваны до вызова Start, Update и т.д. Естественно, для объектов вызванных во время игрового процесса такого не будет.
Перед первым обновлением кадра
- void Start(): Функция Start вызывается до обновления первого кадра(first frame) только если скрипт включен.
Для объектов добавленных на сцену, функция Start будет вызываться во всех скриптах до функции Update. Естественно, это не может быть обеспечено при создании объекта непосредственно во время игры.
Между кадрами
- void OnApplicationPause(): Эта функция вызывается в конце кадра, во время во время которого вызывается пауза, что эффективно между обычными обновлениями кадров. Один дополнительный кадр будет выдан после вызова OnApplicationPause, чтобы позволить игре отобразить графику, которая указывает на состояние паузы.
Порядок обновления
Когда вы отслеживаете игровую логику и взаимодействия, анимации, позиции камеры и т.д. есть несколько разных событий, которые вы можете использовать. По общему шаблону, большая часть задач выполняется внутри функции Update, но есть также ещё другие функции, которые вы можете использовать.
- void FixedUpdate:() Зачастую случается, что FixedUpdate вызывается чаще чем Update. FU может быть вызван несколько раз за кадр, если FPS низок и функция может быть и вовсе не вызвана между кадрами, если FPS высок. Все физические вычисления и обновления происходят сразу после FixedUpdate. При применении расчётов передвижения внутри FixedUpdate, вам не нужно умножать ваши значения на Time.deltaTime. Потому что FixedUpdate вызывается в соответствии с надёжным таймером, независящим от частоты кадров.
- void Update(): Update вызывается раз за кадр. Это главная функция для обновлений кадров.
- void LateUpdate(): LateUpdate вызывается раз в кадр, после завершения Update. Любые вычисления произведённые в Update будут уже выполнены на момент начала LateUpdate. Часто LateUpdate используют для преследующей камеры от третьего лица. Если вы перемещаете и поворачиваете персонажа в Update, вы можете выполнить все вычисления перемещения и вращения камеры в LateUpdate. Это обеспечит то, что персонаж будет двигаться до того, как камера отследит его позицию.
Рендеринг
- void OnPreCull(): Вызывается до того, как камера отсечёт сцену. Отсечение определяет, какие объекты будут видны в камере. OnPreCull вызывается прямо перед тем, как начинается отсечение.
- void OnBecameVisible()/void OnBecameInvisible(): Вызывается тогда, когда объект становится видимым/невидимым любой камере.
- void OnWillRenderObject(): Вызывается один раз для каждой камеры, если объект в поле зрения.
- void OnPreRender(): Вызывается перед тем, как камера начнёт рендерить сцену.
- void OnRenderObject(): Вызывается, после того, как все обычные рендеры сцены завершатся. Вы можете использовать класс GL или Graphics.DrawMeshNow, чтобы рисовать пользовательскую геометрию в данной точке.
- void OnPostRender(): Вызывается после того, как камера завершит рендер сцены.
- void OnRenderImage()(только в Pro версии): Вызывается после завершения рендера сцены, для возможности пост-обработки изображения экрана.
- void OnGUI(): Вызывается несколько раз за кадр и отвечает за элементы интерфейса (GUI). Сначала обрабатываются события макета и раскраски, после чего идут события клавиатуры/мышки для каждого события.
- void OnDrawGizmos() Используется для отрисовки гизмо в окне Scene View в целях визуализации.
Функции физики
- void OnTriggerEnter(): вызывается, когда Collider
other
входит в триггер. - void OnTriggerStay(): вызывается один раз в игровой кадр для каждого другого коллайдера, который касается триггера.
- void OnTriggerExit() :вызывается, когда Collider
other
перестает соприкасаться с триггером. - void OnCollisionEnter(): вызывается, когда этот collider/rigidbody начал соприкосновение с другим rigidbody/collider.
- void OnCollisionStay(): вызывается один раз в кадр для каждого collider/rigidbody, который касается другого rigidbody/collider.
- void OnCollisionExit(): вызывается, когда collider/rigidbody прекращает контакт с другим rigidbody/collider
Функции GUI
- OnMouseOver(): Вызывается каждый кадр, когда мышь находится над GUI элементом или коллайдером.
- OnMouseDown(): вызывается, когда пользователь нажимает кнопку мыши, находясь над элементом GUIElement или Collider.
- OnMouseEnter(): Вызывается, когда мышь входит в GUIElement или Collider.
- OnMouseExit(): Вызывается, когда мышь больше не находится над элементом GUIElement или Collider.
Сопрограммы
Нормальные обновления сопрограмм запускаются после завершения из функции Update. Сопрограмма это функция, которая приостанавливает своё исполнение (yield), пока данные YieldInstruction не завершатся. Разные способы использования сопрограмм:
- yield Сопрограмма продолжит выполнение, после того, как все Update функции были вызваны в следующем кадре.
- yield WaitForSeconds Продолжает выполнение после заданной временной задержки, и после все Update функций, вызванных в итоговом кадре.
- yield WaitForFixedUpdate Продолжает выполнение после того, как все функции FixedUpdate были вызваны во всех скриптах
- yield WWW продолжает выполнение после завершения WWW-загрузки.
- yield StartCoroutine сцепляет сопрограмму, и будет ждать, пока не завершится сопрограмма MyFunc.
Когда объект разрушается
- OnDestroy: Эта функция вызывается после всех обновлений кадра в последнем кадре объекта, пока он ещё существует (объект может быть уничтожен при помощи Object.Destroy или при закрытии сцены).
При выходе
Эти функции вызываются во всех активных объектах в вашей сцене:
- OnApplicationQuit: Эта функция вызывается для всех игровых объектов перед тем, как приложение закрывается. В редакторе вызывается тогда, когда игрок останавливает игровой режим. В веб-плеере вызывается по закрытия веб окна.
- OnDisable: Эта функция вызывается, когда объект отключается или становится неактивным.