Cutscenes and Timelines
The scene timeline is a fixed-capacity sequencer for short in-engine cutscenes, scripted presentation beats, UI changes, audio events, fog, and controller vibration. Author clips in View > Advanced Scene Authoring > Cutscenes.
Clip Settings
Each clip has a unique name, duration, playback speed, loop flag, and Disable Player Controls option. When control blocking is enabled, both Play Mode and the PS1 runtime skip their native player-controller update while the clip is active. Lua scripts and the rest of the scene update continue; this is not a global game pause.
Use Preview in Game View to start the selected clip through Play Mode. Stop Play Mode to restore normal editor preview state.
Visual Timeline
The Cutscenes tab includes a visual timeline shared with standalone Animation authoring:
- use Zoom or Fit to change the visible time range;
- drag the horizontal view control when the full clip does not fit;
- click or hold the ruler to scrub the playhead;
- click a keyframe diamond to select it and move the playhead;
- double-click an empty track row to add a default key at that time;
- drag a diamond to retime its keyframe.
Double-click creation and drag retiming each create one undoable edit. The canvas becomes read-only while Play Mode or a build owns project state. Treat Game View as an authoring preview and validate timing, events, rumble, UI, fog, and camera behavior in the packaged PS1 build.
Track Types
| Group | Tracks |
|---|---|
| Camera | Position, rotation, FOV |
| GameObject | Position, rotation, scale, enabled state |
| UI | Visibility, ProgressBar value, color, anchored position, size |
| Events | Audio Source one-shot, Lua script function |
| Feedback | Rumble Small (high-frequency motor) and Rumble Large (low-frequency motor) strength tracks |
| Skeletal | Play a named clip on a target Animator |
| Rendering | Fog color and fog range |
Camera FOV is clamped to the runtime camera range. UI progress and both rumble
strength tracks use 0.0 to 1.0. The small motor is thresholded by the PS1
runtime, while the large motor supports analog strength. Audio events target an
Audio Source GameObject; a name
or audio GUID in the event-name field can be used as fallback lookup when no
valid target is present. Script events invoke the named function on the target
Lua Behaviour with (targetGameObjectId, 0, payload, "timeline").
UI Position writes the target element's anchored X/Y position. UI Size writes
its positive X/Y size. A Skeletal Animation event uses the keyframe event name
as the target clip name and its boolean value as the loop flag. The target
GameObject must have a valid Animator.
Keyframes and Interpolation
Tracks use timestamped keyframes. Numeric vector, scalar, and color values can use:
- Step
- Linear
- Ease In
- Ease Out
- Ease In Out
Boolean and event data remain discrete. Keep timestamps strictly increasing and inside the clip duration. The editor can sort by time, and validation rejects duplicate or descending timestamps before packaging.
Starting a Clip from Lua
function OnTriggerEnter(gameObjectId, otherGameObjectId)
if not Timeline.IsPlaying() then
Timeline.Play("Door Reveal")
end
end
function skipCutscene(gameObjectId)
Timeline.Stop()
end
See Timeline Lua API.
Lua may attach an OnComplete callback when starting a clip. It runs only on a
natural non-loop end; stopping, replacing, or looping the clip does not invoke
it.
Limits
| Resource | Limit |
|---|---|
| Clips per scene | 8 |
| Tracks per clip | 12 |
| Keyframes per track | 48 |
| Keyframes across all clips | 256 |
Timelines are intended for compact, exclusive scene presentation. For concurrent reusable environment and UI sequences, use Standalone Animations. Imported skeletal assets are authored through the skeletal FBX pipeline; a timeline can trigger their clips but does not edit bones or source motion.