Add Multiple new Keys in Sequencer Pyton

Hi all I am trying to add a bunch of keys to a sequencer using Python. I’m a bit stumped as what I have done here seems like it should work it spawns an Actor then puts that actor in Sequencer and makes the Tracks and Channels.

It should then add 20 keys to the sequencer each with an updated X from the last one and 100 more frames away from the last.

However when I run it the sequencer window shows no keys have been added. Instead it just moves the actor to X=400 but never makes any keys.

It is weird though because when I print out the keys it seems they exist but this is not reflected in the editor at all.

Code

pos = unreal.Vector(400,400,1)
new_actor = actor_system.spawn_actor_from_class(object_class, pos)

actor_system.select_nothing()
actor_system.set_actor_selection_state(new_actor, True)


ls_system = unreal.get_editor_subsystem(unreal.LevelSequenceEditorSubsystem)

# Add selected actors to current level sequence as possessables

actors = actor_system.get_selected_level_actors()

bindings = ls_system.add_actors(actors)

actor_binding = bindings[0]
print(actor_binding)
print(bindings)

transform_track = actor_binding.add_track(unreal.MovieScene3DTransformTrack)
#anim_track = actor_binding.add_track(unreal.MovieSceneSkeletalAnimationTrack)
# Add section to track to be able to manipulate range, parameters, or properties
transform_section = transform_track.add_section()

transform_channel = transform_section.get_all_channels()[0]

#print(transform_section.get_all_channels())

#print(dir(transform_channel.add_key))

transform_channel.add_key(time=unreal.FrameNumber(100), new_value=400)
for i in range(1,20):
    transform_channel.add_key(time=unreal.FrameNumber(100*i), new_value=i*400)

print(transform_channel.get_keys())

The sequencer after running

the output from print(transform_channel.get_keys())

["/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_242'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_243'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_244'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_245'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_246'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_247'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_248'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_249'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_250'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_251'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_252'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_253'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_254'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_255'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_256'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_257'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_258'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_259'", "/Script/SequencerScripting.MovieSceneScriptingDoubleKey'/Engine/Transient.MovieSceneScriptingDoubleKey_260'"]

You’ll need to set the range of the section so that it encompasses the time frame of your keys. Something like:

    transform_section.set_range(start_frame, end_frame)

Or, you could set them to be infinitely bounded:

    transform_section.set_start_frame_bounded(0)
    transform_section.set_end_frame_bounded(0)

Check out here for more examples:

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.