Automate a cutscene
This content is not available in your language yet.
What you’ll build: /Game/Tutorials/LS_Flythrough — a 5-second Level Sequence at 30 fps where a Cine Camera flies from eye level to an overhead look-down while a HeroSubject cube rotates 360°, then plays it back in the Sequencer.
Time: ~90 minutes · Prerequisites: Tutorials 1 and 2 recommended. An empty level open.
Before you start
Section titled “Before you start”pingStep 1 — Prep the scene
Section titled “Step 1 — Prep the scene”Try this prompt:
Spawn a CineCameraActor named HeroCam at location (-500, 0, 200). Then spawn a cube named HeroSubject at the world origin.
What Claude does
CineCameraActor is not in spawn_actor’s fixed enum, so Claude routes through spawn_actor_by_class with actor_class=CineCameraActor and actor_name=HeroCam. Then the cube is a two-call flow (spawn_actor type=StaticMeshActor + set_actor_component_property to assign /Engine/BasicShapes/Cube.Cube), the same pattern you saw in Tutorial 1.
Verify
find_actors_by_name HeroCamfind_actors_by_name HeroSubjectExpected: one HeroCam (class CineCameraActor) at (-500, 0, 200) and one HeroSubject (class StaticMeshActor) at the origin.
Step 2 — Create the Level Sequence
Section titled “Step 2 — Create the Level Sequence”Try this prompt:
Create a Level Sequence named LS_Flythrough under /Game/Tutorials at 30 fps. Set its length to 5 seconds.
What Claude does
Two calls:
create_level_sequencewithname=LS_Flythrough,path=/Game/Tutorials,fps=30.set_sequence_lengthwithsequence_path=/Game/Tutorials/LS_Flythrough,length_seconds=5.
Length and fps are set separately — create_level_sequence accepts fps inline but not length, and set_sequence_length works in seconds (the tool handles the frames conversion internally).
Verify
get_sequence_info sequence_path:/Game/Tutorials/LS_FlythroughExpected: length_seconds: 5, display_rate_fps: 30, empty tracks and bindings.
Step 3 — Bind the camera and add a camera cut track
Section titled “Step 3 — Bind the camera and add a camera cut track”Try this prompt:
Add HeroCam to LS_Flythrough as a possessable, then add a camera cut track pointing at the HeroCam binding.
What Claude does
Two calls:
add_actor_to_sequencewithsequence_path=/Game/Tutorials/LS_Flythrough,actor_name=HeroCam— returns a binding GUID andbinding_name=HeroCam.add_camera_cut_trackwithsequence_path=...,binding_name=HeroCam— creates the camera cut track and a default section pointing at the HeroCam binding.
Verify
get_sequence_info sequence_path:/Game/Tutorials/LS_FlythroughExpected: one binding (HeroCam) and one master-level camera cut track.
Step 4 — Animate the camera
Section titled “Step 4 — Animate the camera”Now the meat of the tutorial. The camera needs a Transform track, and the Transform track’s six channels (Location X/Y/Z + Rotation X/Y/Z, indices 0–5) each hold their own keyframes. add_keyframes_batch writes one channel at a time.
Try this prompt:
On the HeroCam binding, add a Transform track. Set keyframes at frame 0 matching the camera’s starting transform (-500, 0, 200) with zero rotation, and at frame 150 at location (0, 0, 300) with pitch=-90 so it looks straight down.
What Claude does
add_transform_trackwithsequence_path=/Game/Tutorials/LS_Flythrough,binding_name=HeroCam.- Six
add_keyframes_batchcalls, one per channel. Usingsequence_name=LS_Flythrough,track_name=Transform,actor_name=HeroCam:- Channel 0 (Loc.X):
[{frame: 0, value: -500}, {frame: 150, value: 0}] - Channel 1 (Loc.Y):
[{frame: 0, value: 0}, {frame: 150, value: 0}] - Channel 2 (Loc.Z):
[{frame: 0, value: 200}, {frame: 150, value: 300}] - Channel 3 (Rot.X / Roll):
[{frame: 0, value: 0}, {frame: 150, value: 0}] - Channel 4 (Rot.Y / Pitch):
[{frame: 0, value: 0}, {frame: 150, value: -90}] - Channel 5 (Rot.Z / Yaw):
[{frame: 0, value: 0}, {frame: 150, value: 0}]
- Channel 0 (Loc.X):
Verify
get_sequence_info sequence_path:/Game/Tutorials/LS_FlythroughExpected: the HeroCam binding now has a Transform track with keyframes at frames 0 and 150 on each of the six channels.
Step 5 — Animate the subject rotation
Section titled “Step 5 — Animate the subject rotation”Try this prompt:
Add HeroSubject to the sequence. Add a Transform track and animate its yaw from 0 at frame 0 to 360 at frame 150.
What Claude does
add_actor_to_sequencewithactor_name=HeroSubject.add_transform_trackon the new binding.- A single
add_keyframes_batchcall on channel 5 (Rot.Z / Yaw) of the subject’s Transform track:[{frame: 0, value: 0}, {frame: 150, value: 360}]. The other five channels are left with no keyframes, which freezes them at the actor’s current values.
Verify
get_sequence_info sequence_path:/Game/Tutorials/LS_FlythroughExpected: two bindings (HeroCam, HeroSubject) each with a Transform track.
Step 6 — Play it back
Section titled “Step 6 — Play it back”Try this prompt:
Open LS_Flythrough in the Sequencer and play it from the start.
What Claude does
open_level_sequencewithsequence_path=/Game/Tutorials/LS_Flythrough— docks the Sequencer panel.play_sequence— starts playback from the current position.
You should see the viewport flip to the camera view, fly from ground level up to overhead, while the cube spins 360°.
Step 7 — Tune the end pose
Section titled “Step 7 — Tune the end pose”If the overhead shot felt too steep, adjust a single keyframe without redefining the whole track.
Try this prompt:
Raise the camera’s end Z to 400 and soften the pitch to -70 degrees by tweaking the existing keyframes.
What Claude does
Two set_keyframe_value calls against the HeroCam binding’s Transform track:
sequence_path=...,track_index=0,binding_name=HeroCam,channel_index=2(Loc.Z),keyframe_index=1,value=400.- Same but
channel_index=4(Rot.Y / Pitch),value=-70.
Play the sequence again — the flythrough now ends higher with a gentler downward angle. No keyframes were re-created, so the start pose and timing are untouched.
Step 8 — Save the asset
Section titled “Step 8 — Save the asset”Try this prompt:
Save LS_Flythrough and save the current level.
What Claude does
save_asset on /Game/Tutorials/LS_Flythrough, followed by save_level.
What you learned
Section titled “What you learned”- Sequencer workflow — binding → track → keyframes, always in that order. The binding connects a level actor to the sequence; the track declares what’s animated; the keyframes give it values over time.
add_keyframes_batchoperates on one channel at a time (indices 0–5 for Loc + Rot). Batch multiple frames on one channel in a single call — but multiple channels still means multiple calls.- Frame numbers are the wire currency. Seconds-to-frames conversion happens in your head or Claude’s prompt:
frame = seconds × fps. set_keyframe_valuefor targeted pose tweaks without redefining whole tracks — cheap to iterate once the keyframe skeleton is in place.get_sequence_infois the primary debugger — inspect bindings and tracks after every mutation.
Next: explore the full Sequencer reference or the Camera reference for deeper control.