К карте
ВЕРФЬ · UNITY · КВЕСТ 8
Дозор на острове
0
Прогресс0 / 5
СДЕЛАЙ ПЕРВЫЙ ХОД

Нажми — и увидишь, что делает команда

Жми кнопки по очереди — это три настоящие команды.
ПЕРЕД СТАРТОМ
⏱ Сколько займёт
30–50 минут, 5 шагов. Каждый шаг заканчивается результатом на экране.
💻 Что нужно
Компьютер с Windows или macOS. Понадобится Unity — бесплатная для учёбы, поставим на первом шаге. С телефона этот квест не проходится.
⏸ Если прервёшься
Ничего не потеряется: прогресс сохраняется на этом устройстве. Вернёшься — продолжишь с того же шага.
🎓 Чему научишься
вид от третьего лица · движение через силы · модель героя
ШАГ 1 ИЗ 5 · ВЕРФЬ · UNITY · КВЕСТ 8

Взгляд из-за плеча

ЧТО ПРОИСХОДИТ
ЭПИЗОД 8Берег дозорных

Смотреть на остров сверху — как на карту. Марк качает головой: «Так ты не почувствуешь высоту».

Она ставит камеру за плечом героя: «Вот так ходят в больших играх. Видно и героя, и то, что впереди».

Герой перестаёт скользить и начинает идти: с весом, с разгоном, с честной остановкой.

Марк · корабельный мастер верфи
ЧТО ПОЛУЧИТСЯ
ЗАПИСЬ ГОТОВОЙ ИГРЫ
Камера висит за плечом и догоняет героя с мягким опозданием — видно и его, и дорогу к маяку. Так ходят во всех больших приключениях.

Это записано прямо из Unity: движок посчитал каждый кадр игры. К концу квеста такая сцена будет работать у тебя.

СНАЧАЛА — ПОСМОТРИ
ЖИВАЯ ЗАПИСЬ ДВИЖКА
Кадр из Unity 6 — окно Game во время Play. Вид от третьего лица — камера за плечом героя — самый распространённый в больших играх; такую камеру ты соберёшь на этом уроке.
Марк
Читать текстом
Дозорный, сверху остров выглядит как карта — высоту так не почувствуешь. Сегодня поставим камеру за плечо героя. Хитрость вот в чём: камера не ребёнок героя. Она живёт сама по себе и каждый кадр сама встаёт ему за спину — поэтому её можно отдельно крутить, приближать и отдалять. Ещё научишь героя весу: разгон, трение прямо в коде и прыжок, который работает только с земли.

От первого лица делают шутеры, от третьего — почти всё остальное: приключения, RPG, платформеры.

СБОРКА
Player · Capsule + Rigidbody + Collider
  └─ Head · пустой объект на уровне глаз
Main Camera · отдельно! не внутри Player

Хитрость: камера не ребёнок героя. Она живёт сама по себе и каждый кадр ставит себя за спину. Так ею можно управлять отдельно — приближать, отдалять, крутить вокруг персонажа.

ЗАДАНИЕ 1 · ДВИЖЕНИЕ
PlayerMovement.csC#
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerMovement : MonoBehaviour
{
    [SerializeField] private float speed = 10f;
    private Rigidbody body;

    private void Start() => body = GetComponent<Rigidbody>();

    private void FixedUpdate()
    {
        Keyboard kb = Keyboard.current;

        Vector3 move = Vector3.zero;
        if (kb.wKey.isPressed) move += Vector3.forward;
        if (kb.sKey.isPressed) move += Vector3.back;
        if (kb.aKey.isPressed) move += Vector3.left;
        if (kb.dKey.isPressed) move += Vector3.right;

        body.AddRelativeForce(move.normalized * speed);
    }
}
AddRelativeForce толкает объект в его собственных осях: вперёд — туда, куда герой повёрнут, а не на север карты. Обычный AddForce толкал бы в осях мира — и W всегда вело бы в одну сторону.

Обрати внимание: движение здесь через силу, а не через прямую установку скорости. Герой разгоняется и тормозит сам — получается вес.

ШАГ 2 ИЗ 5 · ВЕРФЬ · UNITY · КВЕСТ 8

Мышь крутит мир

ЗАДАНИЕ 2 · КАМЕРА
PlayerRotation.csC#
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerRotation : MonoBehaviour
{
    [SerializeField] private Transform player;         // тело
    [SerializeField] private Transform head;           // точка обзора
    [SerializeField] private float rotationSpeed = 0.1f;

    private float horAngle = 0f;
    private float verAngle = 0f;

    private void Start() => Cursor.lockState = CursorLockMode.Locked;

    private void Update()
    {
        Vector2 delta = Mouse.current.delta.ReadValue();

        horAngle += delta.x * rotationSpeed;
        verAngle -= delta.y * rotationSpeed;
        verAngle = Mathf.Clamp(verAngle, -30f, 60f);   // чтобы не кувыркалось

        player.rotation = Quaternion.Euler(0f, horAngle, 0f);
        transform.rotation = Quaternion.Euler(verAngle, horAngle, 0f);
        transform.position = head.position - transform.forward * 4f;
    }
}
Скрипт вешается на камеру. Последняя строка и есть весь секрет вида от третьего лица: встань на четыре метра позади точки обзора, в направлении, противоположном взгляду. Mathf.Clamp не даёт камере перевернуться.

Скрипт вешай на Main Camera. В Инспекторе у компонента Player Rotation появятся два поля: в Player перетащи из Hierarchy строку Player, в Head — вложенный в него пустой объект Head на уровне глаз.

И предупреждение: из-за Cursor.lockState курсор при Play пропадает — он «приклеен» к окну игры. Вернуть его — клавиша Esc. Мышь не сломалась.

Зачем в коде Mathf.Clamp(verAngle, -30f, 60f)?
Чтобы камера не могла перевернуться через голову героя
Чтобы ускорить поворот
Чтобы камера не отставала
ЧИСЛО 4 — ЭТО ДИСТАНЦИЯ КАМЕРЫ
Поменяй * 4f на * 2f — камера подъедет вплотную, игра станет теснее и напряжённее. Поставь * 8f — герой станет маленьким, зато будет видно всё поле боя. В больших играх это число меняют прямо по ходу: в бою ближе, при исследовании дальше.
НАСТОЯЩИЙ ЭКРАН UNITY — КУДА НАЖИМАТЬ
ТВОЙ ЭКРАН UNITY — КУДА НАЖИМАТЬнажми на кружок — покажу место
Окно редактора
  • 1Project — брось сюда файл .fbxМодель качают с mixamo.com и перетаскивают прямо в это окно. Потом выдели файл: вкладка Rig → Animation Type: Humanoid → Apply.
  • 2Hierarchy — модель внутрь PlayerПеретащи модель мышкой на строку капсулы: она станет дочерней и поедет вместе с ней.
  • 3Transform — обнули позицию и поворотУ вложенной модели Position и Rotation должны быть нулями, иначе герой поедет боком, отдельно от собственной капсулы.
  • 4Галочка у Mesh RendererУ капсулы сними её: капсулу перестанет быть видно, а физика останется. Удалять капсулу нельзя — движку куда легче считать простую капсулу, чем человека с руками и ногами.
  • 5Play — беги и крути мышьюКурсор пропадёт, это делает Cursor.lockState; вернуть — Esc. Герой скользит как по льду — подними у Rigidbody поле Linear Damping примерно до 1.
Отмечено:0 из 5

Это настоящий экран Unity 6 — такой же, как у тебя. Нажимай на кружки по порядку: метка покажет место, строка ниже объяснит, зачем оно. Отмечай пройденное — прогресс сохранится.

ШАГ 3 ИЗ 5 · ВЕРФЬ · UNITY · КВЕСТ 8

Трение и прыжок

ЗАДАНИЕ 3 · ВЕС И ПРЫЖОК
PlayerMovement.csC#
[SerializeField] private float jumpUp = 6f;    // сила прыжка вверх
[SerializeField] private float jumpHor = 2f;   // подкрут вперёд
private Vector3 move;                 // курс: считаем в FixedUpdate, нужен и прыжку

// ↓ остаётся в FixedUpdate
    body.AddRelativeForce(move.normalized * speed);
    body.AddRelativeForce(-move.normalized * body.linearVelocity.magnitude);

// ↓ а прыжок переезжает в Update
    if (Keyboard.current.spaceKey.wasPressedThisFrame)
        body.AddRelativeForce(Vector3.up * jumpUp + move.normalized * jumpHor,
                              ForceMode.Impulse);
Вторая строка — ограничитель скорости: она толкает героя назад тем сильнее, чем быстрее он летит, и разгон с торможением уравновешиваются. Настоящее трение даёт Linear Damping у Rigidbody — оно тормозит и когда клавиши отпущены, а эта строка работает только пока ты держишь ввод. magnitude — длина вектора, то есть текущая скорость числом.

Два правила про кадры: нажатия читаем в Update (в FixedUpdate wasPressedThisFrame проглатывает нажатия — он вызывается реже кадров), а силы прикладываем в FixedUpdate. Поэтому move стал полем класса: в Задании 1 убери слово Vector3 перед ним внутри FixedUpdate, иначе появится вторая переменная с тем же именем. И ForceMode.Impulse обязателен — обычная сила размажется на один кадр, и капсула почти не подпрыгнет.

В Инспекторе у Rigidbody поставь Linear Damping ≈ 1 — это дополнительное сопротивление воздуха. Без него герой будет скользить, как по льду.

НАЙДИ ОШИБКУ
PlayerMovement.csнажми на строку с ошибкой
1private void Update()
2{
3 if (Keyboard.current.spaceKey.wasPressedThisFrame)
4 body.AddRelativeForce(Vector3.up * jumpUp);
5}
Если долбить по пробелу, герой поднимается всё выше и выше.

Герой улетает в космос. Если долбить по пробелу, он поднимается всё выше и выше. Найди строку, из-за которой это возможно.

КАК ЧИНИТЬ
PlayerMovement.csC#
private int touchGround = 0;

private void OnCollisionEnter(Collision other) => touchGround++;
private void OnCollisionExit(Collision other)  => touchGround--;

private void Update()
{
    if (touchGround <= 0) return;    // в воздухе не прыгаем

    if (Keyboard.current.spaceKey.wasPressedThisFrame)
        body.AddRelativeForce(Vector3.up * jumpUp, ForceMode.Impulse);
}
Счётчик, а не галочка: герой может касаться земли и стены одновременно. Вошёл в контакт — плюс один, вышел — минус один. Ноль означает «ни с чем не соприкасаюсь», то есть в воздухе.

Слово return здесь работает как «дальше не читать»: если условие сработало, остаток функции просто не выполнится.

ЭКСКУРС
КАК В НАСТОЯЩИХ ИГРАХ

Взгляд из-за плеча

Камера за плечом появилась, чтобы игрок видел и героя, и дорогу. Сегодня так сделаны почти все большие приключенческие игры.

Тонкость в том, что камера обязана уворачиваться: если между ней и героем оказалась стена, она сама подъезжает ближе. Иначе игрок смотрит в бетон.

Ещё она немного трясётся при беге и успокаивается на месте — мелочь, из-за которой движение кажется настоящим.

ШАГ 4 ИЗ 5 · ВЕРФЬ · UNITY · КВЕСТ 8

Герой вместо капсулы

ЗАДАНИЕ 4 · МОДЕЛЬ
ГЕРОЙ ВМЕСТО КАПСУЛЫ — ЖМИ НА КРУЖОКнажми на кружок — покажу место
FileEditAssetsGameObjectComponentWindowHelpLayout⬡ HierarchySampleSceneMain CameraDirectional LightPlayerBackgroundWaterSurface◈ SceneGame⚙ InspectorPlayerTransformSprite RendererRigidbody 2DBox Collider 2DAdd Component▤ ProjectConsoleAssetsScenesScriptsSprites▶ Game
  • 1Перетащи файл .fbx в окно ProjectМодель с mixamo.com или из Asset Store. Внутри файла — сама модель и её скелет. Для mixamo.com нужен аккаунт Adobe — заводи его вместе с родителем. Не хочешь регистрироваться — возьми бесплатную модель в Asset Store (поиск «free character») или оставь пока капсулу: весь код от этого не изменится.
  • 2Положи модель внутрь PlayerПеретащи её мышкой на строку капсулы в Hierarchy. Позиция (0, 0, 0), поворот тоже нулевой.
  • 3Сними галочку Mesh Renderer у капсулыКапсулу не удаляй! Физике удобнее считать простую капсулу, чем человека с руками и ногами.
  • 4Rig → Animation Type: HumanoidВыдели сам файл .fbx в окне Project (не объект в сцене!) — Инспектор превратится в Import Settings с рядом вкладок: Model, Rig, Animation, Materials. Открой Rig, поставь Animation Type: Humanoid и нажми Apply внизу. Так анимации можно переносить между персонажами.
  • 5Жми Play и пробегисьМодель едет за капсулой, значит иерархия собрана правильно.
Отмечено:0 из 5

Почему не заменить капсулу моделью совсем? Потому что физике удобнее считать простую капсулу, чем сложного человека с руками и ногами. Так делают во всех играх: физическое тело простое, красивая модель висит внутри.

Почему модель делают ребёнком капсулы, а не наоборот?
Так модель едет за физическим телом, а физика остаётся простой и быстрой
Unity не разрешает иначе
Чтобы модель была видна
ШАГ 5 ИЗ 5 · ВЕРФЬ · UNITY · КВЕСТ 8

Настрой ощущение бега

РАБОЧИЕ ЗНАЧЕНИЯ
10
сила движения
1
Linear Damping
4 м
дистанция камеры
−30…60°
предел наклона

Начни с этих значений и подстрой под себя. Ощущение от управления складывается из четырёх-пяти чисел, и найти своё сочетание можно только на ощупь.

ЗАДАНИЕ 5 · ФИНАЛЬНОЕ
1
Пробегись по всей карте
От оврага до вершины горы. Обрати внимание, где неудобно.
2
Проверь склоны
Забирается ли герой на холмы? Слишком крутые — сгладь кистью Smooth.
3
Покрути дистанцию камеры
Найди своё число. Помни: близко — напряжённее, далеко — обзорнее.
4
Позови кого-нибудь
Дай поиграть. Смотри молча, не подсказывая. Всё, обо что человек спотыкается, — твоя работа на завтра.
НОРА · ВЕДУЩАЯ СТУДИИ
Герой бегает по 3D-карте, камера слушается мыши и не кувыркается, прыжок работает только с земли, вместо капсулы — настоящая модель. Это база любой игры от третьего лица.
Марк
Читать текстом
Герой бегает по холмам, камера слушается мыши и не кувыркается через голову, прыжок работает только с земли. Это база любого вида от третьего лица. И ты сделал важную вещь: физику отдал простой капсуле, а красивую модель повесил сверху. Дальше страж у маяка перестанет быть статуей.

Задание студии: добавь бег по Shift — увеличивай speed в полтора раза, пока клавиша зажата, и одновременно отодвигай камеру на метр дальше. Такой приём есть почти во всех играх: на бегу обзор шире.

Поднимай флаг.

Квест пройден!

Герой бегает по 3D-карте, камера слушается мыши, прыжок работает как надо. Грейд ОПЕРАТОР.

Что дальше. У подножия маяка стоит фигура в доспехе. Она не двигалась много лет.

🏅 Забрать диплом Следующий квест: Страж маяка
🔒

Этот остров ещё закрыт

Сначала пройди предыдущий квест — хотя бы просмотри все шаги.

⚑ Экспедиционный режим