Update и LateUpdate
Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 71 из 85.
В каждом кадре Unity вызывает Update() у каждого скрипта и только после того, как все они закончат работу, вызывает LateUpdate() у каждого скрипта. Вы не можете управлять тем, у какого объекта Update() вызовется первым.
Это важно для всего, что зависит от чего-то другого. Камера, которая копирует позицию игрока в Update(), может выполниться до того, как собственный Update() игрока переместит его, и тогда она скопирует позицию игрока кадр назад: камера будет отставать на шаг, причём это может измениться при добавлении объектов или перезагрузке сцены. В LateUpdate() копирование всегда происходит после перемещения игрока:
public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
void LateUpdate()
{
transform.position = player.position + offset;
}Правило: перемещайте объекты в Update(), а код, который реагирует на то, где они оказались, например камеры, подписи и прицеливание, размещайте в LateUpdate(). Оба метода выполняются один раз за кадр, и Time.deltaTime означает одно и то же в обоих случаях.
Задание
СреднеПусть табличка с именем находится точно над игроком в каждом кадре.
- Добавь
void LateUpdate(), который выполняется послеUpdate()каждого скрипта. - Перенеси в него часть
if (target != null), а вUpdate()оставь только перемещение стрелками внутриif (target == null).
Нажми «Играть» и удерживай стрелку: табличка останется прямо над игроком. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
public class Mover : MonoBehaviour
{
public Transform target;
public Vector3 offset;
public float speed = 4f;
void Update()
{
if (target != null)
{
transform.position = target.position + offset;
}
else
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
}
}
}
}
Все уроки раздела Основы скриптинга в Unity
1Основы C# в Unity
Привет, UnityПеременныеДля дробных чисел нужна fТекст в консолиПеременные, которые запоминаютЕсли и иначеСравнение чиселПовторение: сборщик монет7Циклы и методы
Повторение с forЦиклы внутри цикловНапишите методМетоды, которые возвращают значениеМассивыПовторение: лестница10Поиск объектов
Поиск по имениТегиПоиск по типуСсылки лучше поискаNull в UnityПовторение: ближайшая монета13Проект: уворачиваемся от блоков
БегунБлоки с неба2Заставь двигаться
Размести кубДвигай каждый кадрПоворачивай каждую секундуУправляй клавишамиПовторение: веди куб5Векторы
Сложение векторовНаправленияЛокальное и мировое пространствоСкорость по диагоналиРасстояние между объектамиVector3 — это структураПовторение: пилот дрона8Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказ и скрытиеПовторение: выключатель света3Инспектор
Поля инспектораSerializeFieldЧисла с плавающей точкой и MathfАтрибуты инспектораПовторение: лифт6Трансформации и иерархия
Родители и детиПоднять флагМасштабСмотреть на объектыДвигаться к точкеПовторение: Луна на орбите12Жизненный цикл скрипта
Awake и StartUpdate и LateUpdateOnEnable и OnDisableПорядок вызовов жизненного циклаПовторение: логгер жизненного циклаПотренируйтесь самостоятельно: Песочница Unity