Timeline и кат-сцены
Многодорожечная режиссура внутри Unity — анимация, звук, эффекты по таймкоду.
Кат-сцена в FPS, заставка перед боссом, ритуал открытия двери — всё это длится по сценарию, и писать его кодом с таймерами больно. Unity Timeline даёт многодорожечный редактор (как Premiere или DaVinci), где можно расставлять анимации, звуки, активацию объектов и сигналы в скрипты.
Что такое Timeline и PlayableDirector
- Timeline Asset (
.playable) — ассет с описанием дорожек и клипов. - PlayableDirector — компонент на GameObject, проигрывающий Timeline Asset. У него — bindings: для каждой дорожки указывается, на каком объекте сцены применять эффект.
Создаётся через Window → Sequencing → Timeline. На сцене выберите GameObject (создастся
PlayableDirector + Timeline Asset), и откроется редактор.
Дорожки (Tracks)
Стандартные типы:
- Animation Track — проигрывает анимацию на привязанном Animator или Transform.
- Audio Track — проигрывает AudioClip через AudioSource.
- Activation Track — включает/выключает GameObject в заданные интервалы.
- Control Track — управление вложенным Timeline, Particle System или Prefab Instance.
- Signal Track — отправляет именованные сигналы в код (события).
- Cinemachine Track — переключение между виртуальными камерами с blendами.
- Playable Track — кастомные ваши playable’ы (продвинутый случай).
Пример: открытие двери
Сценарий: подходит игрок → 3 секунды кат-сцены → дверь поворачивается, играет звук скрипа, камера показывает что за дверью, потом возвращается к игроку.
- На сцене: GameObject “DoorCutscene” с PlayableDirector + Timeline Asset.
- В Timeline создайте дорожки:
- Cinemachine Track → переключение
MainCam→DoorCam→MainCamс blend 0.5s. - Animation Track на двери: drag-drop клип “Door_Open”.
- Audio Track: clip с эффектом скрипа.
- Signal Track на конце: сигнал “CutsceneFinished”.
- Cinemachine Track → переключение
- На сцене: компонент
SignalReceiver, обрабатывает сигнал и вызывает ваш код.
using UnityEngine;
using UnityEngine.Playables;
public class DoorOpener : MonoBehaviour
{
[SerializeField] private PlayableDirector director;
private void OnTriggerEnter(Collider other) {
if (other.CompareTag("Player")) {
director.Play();
}
}
// Метод, привязанный к Signal Receiver
public void OnCutsceneFinished() {
// Например, вернуть управление игроку, открыть дверь как Trigger
Debug.Log("Cutscene done — gameplay resumed");
}
}
Signals — кран между Timeline и кодом
Signal — самая полезная штука для связи кат-сцен и игровой логики:
- Создайте SignalAsset в Project (Create → Signal).
- В Timeline на Signal Track добавьте клип с этим сигналом в нужный момент.
- На сцене: на GameObject — компонент SignalReceiver, добавьте reaction: при срабатывании
сигнала “PlayHitSound” вызвать метод
AudioManager.PlayHit.
Это позволяет одному и тому же Timeline-ассету посылать события разным объектам сцены — связь идёт через bindings, а не через жёстко прописанные пути.
Без Cinemachine Track вам пришлось бы вручную двигать камеру через Animation Track, что хрупко и не масштабируется. С ним вы переключаетесь между виртуальными камерами одним кликом, blend задаётся в самом Timeline.
Wrap Mode и приостановка времени
PlayableDirector имеет настройки:
- Play On Awake — стартовать сразу при запуске сцены.
- Wrap Mode —
Hold(заморозить на последнем кадре),Loop,None(исчезнуть). - Update Method —
GameTime(учитываетTime.timeScale),UnscaledGameTime,DSPClock(для синхронизации с аудио),Manual.
Для важных кат-сцен ставят UnscaledGameTime — чтобы пауза не остановила саму кат-сцену.
Связь с Animator
При проигрывании Timeline берёт управление над Animator-ом привязанного объекта (через override controller под капотом). После окончания Timeline возвращает Animator в исходное состояние. Это гарантирует, что во время кат-сцены ваш персонаж не “дёрнется” в idle из state machine.
Что обычно идёт не так
- Bindings не привязаны. Timeline Asset — это шаблон. На каждом PlayableDirector нужно привязать дорожки к конкретным объектам сцены. Без этого ничего не играет.
- Cinemachine Brain в
Manualmode. Если CinemachineBrain в режиме Manual, переключения виртуальных камер из Timeline не сработают. - Расхождение по времени с анимациями. Если ваши клипы рассчитаны на 30 FPS, а Timeline в 60 FPS — настраивайте Sample Rate соответствующе.
- Использование Timeline для всего. Timeline — это режиссёрский инструмент, не игровая логика. Не пишите квестовую систему через Timeline.
В следующей главе — мультиплеер: основы Netcode for GameObjects.