Нажми — и увидишь, что делает команда
- ⏱ Сколько займёт
- 30–50 минут, 5 шагов. Каждый шаг заканчивается результатом на экране.
- 💻 Что нужно
- Компьютер с Windows или macOS. Понадобится Unity — бесплатная для учёбы, поставим на первом шаге. С телефона этот квест не проходится.
- ⏸ Если прервёшься
- Ничего не потеряется: прогресс сохраняется на этом устройстве. Вернёшься — продолжишь с того же шага.
- 🎓 Чему научишься
- вид от третьего лица · движение через силы · модель героя
Взгляд из-за плеча
Смотреть на остров сверху — как на карту. Марк качает головой: «Так ты не почувствуешь высоту».
Она ставит камеру за плечом героя: «Вот так ходят в больших играх. Видно и героя, и то, что впереди».
Герой перестаёт скользить и начинает идти: с весом, с разгоном, с честной остановкой.
Это записано прямо из Unity: движок посчитал каждый кадр игры. К концу квеста такая сцена будет работать у тебя.
Читать текстом
От первого лица делают шутеры, от третьего — почти всё остальное: приключения, RPG, платформеры.
Хитрость: камера не ребёнок героя. Она живёт сама по себе и каждый кадр ставит себя за спину. Так ею можно управлять отдельно — приближать, отдалять, крутить вокруг персонажа.
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 всегда вело бы в одну сторону.Обрати внимание: движение здесь через силу, а не через прямую установку скорости. Герой разгоняется и тормозит сам — получается вес.
Мышь крутит мир
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. Мышь не сломалась.
* 4f на * 2f — камера подъедет вплотную, игра станет теснее и напряжённее. Поставь * 8f — герой станет маленьким, зато будет видно всё поле боя. В больших играх это число меняют прямо по ходу: в бою ближе, при исследовании дальше.
- 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.
Это настоящий экран Unity 6 — такой же, как у тебя. Нажимай на кружки по порядку: метка покажет место, строка ниже объяснит, зачем оно. Отмечай пройденное — прогресс сохранится.
Трение и прыжок
[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);
magnitude — длина вектора, то есть текущая скорость числом.Два правила про кадры: нажатия читаем в Update (в FixedUpdate
wasPressedThisFrame проглатывает нажатия — он вызывается реже кадров), а силы прикладываем в FixedUpdate. Поэтому move стал полем класса: в Задании 1 убери слово Vector3 перед ним внутри FixedUpdate, иначе появится вторая переменная с тем же именем. И ForceMode.Impulse обязателен — обычная сила размажется на один кадр, и капсула почти не подпрыгнет.В Инспекторе у Rigidbody поставь Linear Damping ≈ 1 — это дополнительное сопротивление воздуха. Без него герой будет скользить, как по льду.
Герой улетает в космос. Если долбить по пробелу, он поднимается всё выше и выше. Найди строку, из-за которой это возможно.
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 здесь работает как «дальше не читать»: если условие сработало, остаток функции просто не выполнится.

Взгляд из-за плеча
Камера за плечом появилась, чтобы игрок видел и героя, и дорогу. Сегодня так сделаны почти все большие приключенческие игры.
Тонкость в том, что камера обязана уворачиваться: если между ней и героем оказалась стена, она сама подъезжает ближе. Иначе игрок смотрит в бетон.
Ещё она немного трясётся при беге и успокаивается на месте — мелочь, из-за которой движение кажется настоящим.
Герой вместо капсулы
- 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 и пробегисьМодель едет за капсулой, значит иерархия собрана правильно.
Почему не заменить капсулу моделью совсем? Потому что физике удобнее считать простую капсулу, чем сложного человека с руками и ногами. Так делают во всех играх: физическое тело простое, красивая модель висит внутри.
Настрой ощущение бега
Начни с этих значений и подстрой под себя. Ощущение от управления складывается из четырёх-пяти чисел, и найти своё сочетание можно только на ощупь.
Читать текстом
Задание студии: добавь бег по Shift — увеличивай speed в полтора раза, пока клавиша зажата, и одновременно отодвигай камеру на метр дальше. Такой приём есть почти во всех играх: на бегу обзор шире.
Поднимай флаг.