Menu
CoddyTech

Орбитальная камера

Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 46 из 63.

Чтобы двигаться по кругу вокруг точки, храни угол, поворачивай на него фиксированное смещение и прибавляй результат к точке. Поворот, умноженный на вектор, выполняет вращение: Quaternion.Euler(0, angle, 0) * offset поворачивает смещение вокруг оси y, сохраняя его длину и высоту. Эта камера облетает статую со скоростью 20 градусов в секунду, всегда находясь на высоте 3 единицы и на расстоянии 6 единиц:

public Transform statue;
public float speed = 20f;
float angle;

void LateUpdate()
{
    angle += speed * Time.deltaTime;
    Vector3 offset = new Vector3(0, 3, -6);
    transform.position = statue.position + Quaternion.Euler(0, angle, 0) * offset;
    transform.LookAt(statue);
}

При угле 0 смещение равно (0, 3, -6), поэтому камера находится за статуей. При 90 смещение равно (-6, 3, 0), камера находится со стороны -x от статуи, а при 180 — (0, 3, 6), перед ней. Перемещение камеры не поворачивает её, поэтому LookAt направляет её на статую из каждой новой точки.

Угол хранится в собственном поле, как и в случае углов Эйлера: он может вырасти выше 360 или опуститься ниже 0 без скачка, а ещё его можно ограничить или изменять с клавиатуры. Выполнение этого в LateUpdate() размещает камеру после того, как статуя или игрок переместились в текущем кадре.

challenge icon

Задание

Средне

Позволь игроку перемещать камеру вокруг башни, всегда удерживая её на расстоянии distance (8) единиц от положения башни и направляя на неё. Скрипт хранит два угла в yaw и pitch:

  • yaw — это угол, на который камера облетела башню. Стрелка вправо увеличивает его, а стрелка влево уменьшает со скоростью turnSpeed (90) градусов в секунду. При yaw 0 камера находится со стороны -z башни; при yaw 90 — со стороны -x.
  • pitch — это угол в градусах, на который камера поднята над уровнем башни, если смотреть со стороны башни. Стрелка вверх увеличивает его, а стрелка вниз уменьшает со скоростью tiltSpeed (45) градусов в секунду; угол остаётся в диапазоне от 10 до 60.

Изначально yaw равен 0, а pitch — 30, поэтому камера находится на 4 единицы выше положения башни и на 6.93 единицы позади неё. Нажми Играть, полетай вокруг, затем нажми Проверить.

Попробуйте сами

using UnityEngine;

public class OrbitCamera : MonoBehaviour
{
    public Transform target;
    public float distance = 8f;
    public float turnSpeed = 90f;
    public float tiltSpeed = 45f;
    public float yaw = 0f;
    public float pitch = 30f;

    void Update()
    {
        // Стрелки изменяют yaw и pitch.
    }

    void LateUpdate()
    {
        // Расположите камеру вокруг target и направьте её на него.
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Физика и игровой процесс