Skip to content

Animation Tools

Manage AnimationClips, Timeline sequences, Animator Controllers, and Particle Systems. Use these tools for keyframe animation, cinematic authoring, state machine setup, and particle effects.

animation

Read or author keyframe animation on AnimationClips. Use this for per-object AnimationClips, not for Animator state machine control (use animator for that).

Parameters: - action (string) — "get" | "create" | "edit" | "preview" | "add_event" | "remove_event" | "get_events" | "set_wrap" | "set_framerate" | "get_clip_path" - path (string) — Scene path to target GameObject - clip (string, optional) — AnimationClip name (required for edit/preview) - clip_name (string, optional) — New clip name (used with create) - property (string, optional) — Property to animate (e.g., "localPosition.x", "scale.y", "m_Color.a") - keys (string, optional) — Keyframe data: t:0 v:(0,0,0); t:1 v:(0,2,0) (time in seconds, value). Also used for set_wrap ("loop"|"once"|"pingpong"|"clamp") and set_framerate ("30") - time (float, optional) — Time position for preview/add_event (seconds) - component_type (string, optional) — Unity component to animate (default: Transform). Examples: Light, Camera, Rigidbody - binding_path (string, optional) — Sub-object path for EditorCurveBinding (e.g., "Head/Jaw"). Default "" = root - tangent (string, optional) — Tangent mode for keyframes: "auto" (default) | "smooth" | "linear" | "constant" - function_name (string, optional) — Method name for add_event - int_param (int, optional) — Integer parameter for add_event - float_param (float, optional) — Float parameter for add_event - string_param (string, optional) — String parameter for add_event

Actions:

Action Purpose Required Params Example
get List clips and keys path animation("get", path="Player")
create New AnimationClip on object path, clip_name animation("create", path="Player", clip_name="Walk")
edit Add/replace keyframes path, clip, property, keys animation("edit", path="Player", clip="Walk", property="localPosition.x", keys="t:0 v:0; t:1 v:5")
preview Scrub to time path, clip, time animation("preview", path="Player", clip="Walk", time=0.5)
add_event Add animation event path, clip, time, function_name animation("add_event", path="Player", clip="Walk", time=0.5, function_name="OnStep")
remove_event Remove animation event path, clip, time animation("remove_event", path="Player", clip="Walk", time=0.5)
get_events List animation events path, clip animation("get_events", path="Player", clip="Walk")
set_wrap Set wrap mode path, clip, keys animation("set_wrap", path="Player", clip="Walk", keys="loop")
set_framerate Set clip framerate path, clip, keys animation("set_framerate", path="Player", clip="Walk", keys="30")
get_clip_path Get asset path of clip path, clip animation("get_clip_path", path="Player", clip="Walk")

Example:

# Create animation clip
await animation("create", path="Player", clip_name="Jump")

# Add keyframes (0→1 second, position 0→10 on X-axis)
await animation("edit", path="Player", clip="Jump", property="localPosition.x",
                keys="t:0 v:0; t:1 v:10")

# Preview at 0.5 seconds
await animation("preview", path="Player", clip="Jump", time=0.5)

timeline

Manage Unity Timeline (PlayableDirector / TimelineAsset) for multi-track cinematic sequences. Use for mixing animation, audio, activation, and custom tracks.

Parameters: - path (string) — Scene path to GameObject with PlayableDirector - action (string) — "get" | "create" | "add_track" | "remove_track" | "add_clip" | "remove_clip" | "set_binding" | "set_timing" | "mute" | "unmute" | "lock" | "unlock" | "rename_track" | "reorder_track" | "duplicate_clip" | "add_marker" | "remove_marker" | "set_track_offset" | "set_duration" | "add_sub_track" | "set_clip_in" | "get_bindings" | "preview" - track (string, optional) — Track name for targeting specific track - track_type (string, optional) — Track type: "Animation" | "Audio" | "Activation" | "Signal" | "Control" | "Group" - clip (string, optional) — AnimationClip name - binding (string, optional) — Scene object path to bind track - start (float, optional) — Clip start time (seconds) - duration (float, optional) — Clip duration (seconds) - blend_in (float, optional) — Blend-in duration (seconds) - blend_out (float, optional) — Blend-out duration (seconds) - asset_path (string, optional) — TimelineAsset path (Assets/...) - director_path (string, optional) — PlayableDirector path - tracks (string, optional) — Track list (get action) - time (float, optional) — Scrub to time (seconds) - name (string, optional) — New name for rename_track, or marker name - clip_in (float, optional) — Clip-in time for set_clip_in - index (int, optional) — Target position for reorder_track - offset (float, optional) — Time shift for duplicate_clip - value (string, optional) — Offset mode for set_track_offset: "auto" | "transform" | "scene"

Actions:

Action Purpose Example
get Inspect tracks and clips timeline(path="Cutscene", action="get")
create New TimelineAsset timeline(path="Cutscene", action="create", asset_path="Assets/Cinematics/Intro.playable")
add_track Create track timeline(path="Cutscene", action="add_track", track="AnimTrack1", track_type="Animation")
remove_track Delete track timeline(path="Cutscene", action="remove_track", track="AnimTrack1")
add_clip Place clip on track timeline(path="Cutscene", action="add_clip", track="AnimTrack1", clip="Walk", start=0, duration=2)
remove_clip Remove clip from track timeline(path="Cutscene", action="remove_clip", track="AnimTrack1", clip="Walk")
set_binding Bind track to object timeline(path="Cutscene", action="set_binding", track="AnimTrack1", binding="Player")
get_bindings List all track bindings timeline(path="Cutscene", action="get_bindings")
set_timing Set clip start/duration timeline(path="Cutscene", action="set_timing", track="AnimTrack1", clip="Walk", start=1, duration=3)
mute Mute track timeline(path="Cutscene", action="mute", track="AnimTrack1")
unmute Unmute track timeline(path="Cutscene", action="unmute", track="AnimTrack1")
lock Lock track timeline(path="Cutscene", action="lock", track="AnimTrack1")
unlock Unlock track timeline(path="Cutscene", action="unlock", track="AnimTrack1")
rename_track Rename track timeline(path="Cutscene", action="rename_track", track="AnimTrack1", name="PlayerAnim")
reorder_track Move track to position timeline(path="Cutscene", action="reorder_track", track="AnimTrack1", index=0)
duplicate_clip Copy clip with offset timeline(path="Cutscene", action="duplicate_clip", track="AnimTrack1", clip="Walk", offset=2.0)
add_marker Add timeline marker timeline(path="Cutscene", action="add_marker", time=1.0, name="CuePoint")
remove_marker Remove marker timeline(path="Cutscene", action="remove_marker", name="CuePoint")
set_track_offset Set track offset mode timeline(path="Cutscene", action="set_track_offset", track="AnimTrack1", value="auto")
set_duration Set timeline duration timeline(path="Cutscene", action="set_duration", duration=10.0)
add_sub_track Add sub-track to group timeline(path="Cutscene", action="add_sub_track", track="Group1", track_type="Animation")
set_clip_in Set clip-in time timeline(path="Cutscene", action="set_clip_in", track="AnimTrack1", clip="Walk", clip_in=0.5)
preview Scrub to time timeline(path="Cutscene", action="preview", time=1.5)

Example:

# Create new timeline
await timeline(path="Director", action="create", asset_path="Assets/Intro.playable")

# Add animation track
await timeline(path="Director", action="add_track", track="PlayerAnim", track_type="Animation")

# Bind track to Player
await timeline(path="Director", action="set_binding", track="PlayerAnim", binding="Player")

# Place animation clip
await timeline(path="Director", action="add_clip", track="PlayerAnim", 
               clip="Walk", start=0, duration=2)

# Preview at 1 second
await timeline(path="Director", action="preview", time=1.0)

animator

Manage Animator Controller state machines. Add states, parameters, and transitions.

Parameters: - action (string) — "get" | "add_param" | "add_state" | "add_transition" | "set_default" | "remove" | "add_blend_tree" | "edit_blend_tree" | "get_blend_tree" | "add_layer" | "remove_layer" | "rename_layer" | "set_layer_weight" | "set_layer_blending" | "set_state_speed" | "update_transition" | "set_avatar" | "rename_state" | "rename_param" - path (string) — Scene path to GameObject with Animator - state (string, optional) — State name - states (string, optional) — State definitions: "Idle:Idle.anim; Walk:Walk.anim; Run" - params (string, optional) — Parameters: "Speed:float:0; Jump:trigger; IsGrounded:bool:false" - source (string, optional) — Transition source state (use "*" for AnyState) - target (string, optional) — Transition target state - conditions (string, optional) — Transition conditions: "Speed>0.1; IsGrounded" - duration (float, optional) — Transition duration (seconds) - exit_time (float, optional) — Exit time threshold (0-1) - has_exit_time (bool, optional) — Whether transition has exit time - type (string, optional) — Parameter type (float|bool|int|trigger) - name (string, optional) — Parameter or state name - blend_type (string, optional) — Blend tree type: "1d" | "2d_simple" | "2d_freeform" | "2d_cartesian" | "direct" - param (string, optional) — Blend parameter (auto-created as float if missing) - param_y (string, optional) — Second blend parameter (for 2D blend trees) - children (string, optional) — Blend tree children: "(1D) Idle:0; Walk:0.5; Run:1" or "(2D) Idle:0,0; Walk:0,1" - edit_action (string, optional) — Blend tree edit: "add_child" | "remove_child" | "set_thresholds" | "set_param" | "set_type" - layer (int or string, optional) — Layer index for add_state/add_transition/set_default, or name/index for CRUD ops - weight (float, optional) — Default weight for add_layer/set_layer_weight (0.0-1.0) - blending (string, optional) — Layer blending: "Override" | "Additive" (for add_layer/set_layer_blending) - value (string, optional) — Speed multiplier for set_state_speed - avatar_path (string, optional) — Asset path for set_avatar

Actions:

Action Purpose Example
get Inspect states, params, transitions animator("get", path="Player")
add_param Create parameter animator("add_param", path="Player", type="float", name="Speed")
add_state Create state animator("add_state", path="Player", state="Walk")
add_transition Create transition animator("add_transition", path="Player", source="Idle", target="Walk", conditions="Speed>0.1", duration=0.2)
set_default Set default state animator("set_default", path="Player", state="Idle")
remove Remove state/param/transition animator("remove", path="Player", state="Walk")
add_blend_tree Create blend tree state animator("add_blend_tree", path="Player", state="Locomotion", blend_type="1d", param="Speed", children="Idle:0; Walk:0.5; Run:1")
edit_blend_tree Modify existing blend tree animator("edit_blend_tree", path="Player", state="Locomotion", edit_action="add_child", children="Sprint:2")
get_blend_tree Inspect blend tree animator("get_blend_tree", path="Player", state="Locomotion")
add_layer Add animator layer animator("add_layer", path="Player", name="UpperBody", weight=1.0, blending="Override")
remove_layer Remove layer animator("remove_layer", path="Player", layer="UpperBody")
rename_layer Rename layer animator("rename_layer", path="Player", layer="UpperBody", name="Arms")
set_layer_weight Set layer weight animator("set_layer_weight", path="Player", layer=1, weight=0.5)
set_layer_blending Set layer blend mode animator("set_layer_blending", path="Player", layer=1, blending="Additive")
set_state_speed Set state speed multiplier animator("set_state_speed", path="Player", state="Walk", value="1.5")
update_transition Update existing transition animator("update_transition", path="Player", source="Idle", target="Walk", duration=0.3)
set_avatar Set animator avatar animator("set_avatar", path="Player", avatar_path="Assets/Models/PlayerAvatar.asset")
rename_state Rename state animator("rename_state", path="Player", state="Walk", name="Walking")
rename_param Rename parameter animator("rename_param", path="Player", name="Speed", value="MoveSpeed")

Example:

# Create parameters
await animator("add_param", path="Player", type="float", name="Speed")
await animator("add_param", path="Player", type="bool", name="IsGrounded")

# Add states
await animator("add_state", path="Player", state="Idle")
await animator("add_state", path="Player", state="Walk")
await animator("add_state", path="Player", state="Run")

# Add transitions
await animator("add_transition", path="Player", source="Idle", target="Walk",
              conditions="Speed>0.1", duration=0.2)
await animator("add_transition", path="Player", source="Walk", target="Run",
              conditions="Speed>2.0", duration=0.3)

# Set default state
await animator("set_default", path="Player", state="Idle")

particle

Create and configure Particle Systems with preset or custom modules.

Parameters: - action (string) — "get" | "create" | "set" | "apply" | "play" | "stop" | "pause" - path (string) — Scene path to target GameObject - name (string, optional) — Particle system name - module (string, optional) — Module: "main" | "emission" | "shape" | "colorOverLifetime" | "sizeOverLifetime" | "velocityOverLifetime" | "noise" | "renderer" | "trails" | "collision" | "rotationOverLifetime" - prop (string, optional) — Module property name - value (string, optional) — Property value - preset (string, optional) — Preset type: "fire" | "smoke" | "sparks" | "rain" | "snow" | "explosion" | "magic" | "dust" | "blood" | "trail"

Actions:

Action Purpose Example
get Inspect particle system particle("get", path="Effects/Fire")
create New ParticleSystem particle("create", path="Enemy", name="Explosion", preset="explosion")
set Change module property particle("set", path="Effects/Fire", module="emission", prop="rateOverTime", value="50")
apply Apply a preset to an existing system particle("apply", path="Effects/Fire", preset="fire")
play Start playback particle("play", path="Effects/Fire")
stop Stop playback particle("stop", path="Effects/Fire")
pause Pause playback particle("pause", path="Effects/Fire")

Example:

# Create particle system with preset
await particle("create", path="Effects", name="ExplosionFX", preset="explosion")

# Customize emission
await particle("set", path="Effects/ExplosionFX", module="emission", 
              prop="rateOverTime", value="100")

# Customize renderer
await particle("set", path="Effects/ExplosionFX", module="renderer",
              prop="maxParticleSize", value="10")

# Reset the system to the named preset when needed
await particle("apply", path="Effects/ExplosionFX", preset="explosion")

Common Patterns

Task Tools Example
Create looping animation animation → editor(play) await animation("create", path="Player", clip_name="Idle"); await animation("edit", path="Player", clip="Idle", property="localPosition.x", keys="t:0 v:0; t:1 v:0")
Build animator state machine animator (add_param → add_state → add_transition) Add all parameters first, then states, then transitions
Create cinematic sequence timeline (add_track → set_binding → add_clip → preview) Use multiple tracks for layered sequences
Particle effect with animation particle(preset) → timeline(add_clip) Add particle system to Timeline for synchronized effects

See also: Scene Tools for playback control, Runtime Tools for Play Mode state inspection.