Камера и Cinemachine
Виды от первого/третьего лица, виртуальные камеры и плавный follow без матана.
Camera-компонент
Камера в Unity — обычный GameObject с компонентом Camera. Главные поля:
- Projection —
Perspective(3D, с перспективой) илиOrthographic(без перспективы; 2D/изометрия). - FOV (Field of View) — угол обзора по вертикали в градусах. Стандарт для FPS — 60–90°.
- Clipping Planes: Near / Far — расстояние ближней и дальней плоскости отсечения. Всё, что
ближе Near или дальше Far, не рисуется. Большой разброс (например, 0.01 ↔ 10000) ухудшает точность
Z-buffer и приводит к “Z-fighting” — мерцающим пересечениям. Старайтесь держать
Far/Near < ~10000. - Culling Mask — какие слои объектов рисует эта камера.
- Target Texture — рендерить картинку не на экран, а в текстуру (мини-карты, портал-эффекты).
- Depth — порядок отрисовки нескольких камер.
// Простой follow-камера в LateUpdate
public class SimpleFollow : MonoBehaviour
{
[SerializeField] private Transform target;
[SerializeField] private Vector3 offset = new Vector3(0, 2f, -4f);
[SerializeField] private float smoothTime = 0.15f;
private Vector3 _velocity;
private void LateUpdate() {
Vector3 desired = target.position + target.rotation * offset;
transform.position = Vector3.SmoothDamp(transform.position, desired, ref _velocity, smoothTime);
transform.LookAt(target.position + Vector3.up * 1.5f);
}
}
Vector3.SmoothDamp — критически удобная функция: сглаживает движение с пружинной механикой,
без пересохранения целевой позиции. Хранит “скорость” во внешней переменной.
Если двигать камеру в Update, она может догонять цель на кадр позже. LateUpdate гарантирует,
что цель уже перемещена в этом кадре.
Cinemachine — следить за целью без боли
Cinemachine — UPM-пакет (предустановлен в стандартных шаблонах Unity 6, но всё ещё устанавливается через Package Manager) с виртуальными камерами. Идея: на сцене одна реальная Camera, а Cinemachine динамически переключает её на разные виртуальные точки зрения. Без скриптов можно собрать:
- Follow — следить за объектом с задержкой и demping.
- Look At — смотреть на объект, плавно поворачиваясь.
- FreeLook — орбитальная камера с тремя кольцами (третье лицо, как в Dark Souls).
- Cart/Dolly — движение по сплайну.
- State-Driven Camera — переключение виртуальных камер по состоянию Animator.
Базовая follow-camera в Cinemachine 3.x
В Unity 6 поставляется Cinemachine 3, у которого API заметно отличается от 2.x:
- Добавьте на сцену CinemachineCamera (раньше —
CmCamera/CinemachineVirtualCamera). - В поле “Tracking Target” укажите Transform игрока.
- На виртуальной камере добавьте stage-компоненты (наследники
CinemachineComponentBase):CinemachineFollow(раньше Body) иCinemachineHardLookAt/CinemachineRotationComposer(раньше Aim). Это отдельная категория, не то же самое, что Cinemachine Extensions (Impulse Listener, Deoccluder и др.).
Один CinemachineBrain на основной Camera автоматически блендит между активными виртуальными камерами
по приоритету. Хотите переключить вид? vcam.Priority = 100; — и Brain мягко переедет туда за
заданное время блендинга.
public class CameraSwitcher : MonoBehaviour
{
[SerializeField] private Unity.Cinemachine.CinemachineCamera firstPerson;
[SerializeField] private Unity.Cinemachine.CinemachineCamera thirdPerson;
public void SwitchToFP() {
firstPerson.Priority = 20;
thirdPerson.Priority = 10;
}
}
Если читаете старые туториалы — там CinemachineVirtualCamera с Body и Aim секциями. В Unity 6
это CinemachineCamera с отдельными компонентами-расширениями. Концепция та же, имена другие.
Главный совет про камеру
Камера — это режиссёр, а не оператор-стажёр.
Лучшая камера — та, которую игрок не замечает. Сделайте плавность (smooth follow), запас по углу обзора, чтобы цель не упиралась в край экрана, и не давайте камере прыгать на резких поворотах персонажа. Cinemachine за вас уже учитывает большинство этих случаев — пользуйтесь.
В следующей главе — рендеринг: как Unity вообще рисует пиксели.