Skip to content

Latest commit

 

History

History
149 lines (103 loc) · 3.79 KB

sequencer_API.md

File metadata and controls

149 lines (103 loc) · 3.79 KB

The Sequencer API

The sequencer API development has been sponsored by Matthew Whelan (http://www.mattwhelan.com/)

Credits should go to Ron Fischer too, for having explained me the sequencer api ;)

Creating a Sequencer Asset

You can create a new 'Level Sequence' asset using the LevelSequencerFactoryNew class:

from unreal_engine.classes import LevelSequenceFactoryNew

factory = LevelSequenceFactoryNew()
seq = factory.factory_create_new('/Game/MovieMaster')

Adding a master track to a Level Sequence

In the following example we add a MovieSceneAudioTrack as a master track

from unreal_engine.classes import MovieSceneAudioTrack

audio_track = seq.sequencer_add_master_track(MovieSceneAudioTrack)

Getting the available track classes

the following snippet prints the name of the MovieSceneTrack classes

import unreal_engine as ue
from unreal_engine.classes import MovieSceneTrack

for uclass in ue.all_classes():
    if uclass.is_child_of(MovieSceneTrack):
        print(uclass.get_name())

Getting the list of master tracks

tracks = seq.sequencer_master_tracks()

Possessables and Spawnables

Adding tracks

Adding a section to a track

This is a pretty complex example, we add a skeletal animation track and then we add a bunch of sections (each of them should point to an animation asset using the AnimSequence field)

from unreal_engine.classes import MovieSceneSkeletalAnimationTrack

# add an animation track mapped to the just added actor
anim = seq.sequencer_add_track(MovieSceneSkeletalAnimationTrack, guid)

# create 3 animations sections (assign AnimSequence field to set the animation to play)
anim_sequence = anim.sequencer_track_add_section()
anim_sequence.StartTime = 1
anim_sequence.EndTime = 3
anim_sequence.RowIndex = 0

anim_sequence2 = anim.sequencer_track_add_section()
anim_sequence2.RowIndex = 1
anim_sequence2.StartTime = 2
anim_sequence2.EndTime = 5

anim_sequence3 = anim.sequencer_track_add_section()
anim_sequence3.RowIndex = 1
anim_sequence3.SlotName = 'Hello'
anim_sequence3.StartTIme = 0
anim_sequence3.EndTime = 30

Adding Keyframes to sections

from unreal_engine import FTransform, FVector
from unreal_engine.classes import MovieScene3DTransformTrack

# possess an actor and get its binding guid
guid = seq.sequencer_add_actor(an_actor_in_the_scene)

transform_track = seq.sequencer_add_track(MovieScene3DTransformTrack, guid)
transform_section = transform_track.sequencer_track_add_section()

# set section size
transform_section.StartTime = 0
transform_section.EndTime = 5

# adding keyframes to section
transform_section.sequencer_section_add_key(0.0, FTransform(FVector(17, 22, 30)))
transform_section.sequencer_section_add_key(0.17, FTransform(FVector(30, 17, 22)))

Managing the camera cut track

Folders

listing folders

# get the root folders
root_folders = seq.sequencer_folders()

# get subfolders
sub_folders = seq.sequencer_folders(root_folders[0])

creating folders

new_folder = seq.sequencer_create_folder('Folder001')

# create subfolder
new_sub_folder = seq.sequencer_create_folder('SubFolder001', new_folder)

Notify changes to the editor

Some of the sequencer api operations do not update the editor, if you need to force an update you can use

seq.sequencer_changed(True)

the boolean argument (if True) move the editor focus to the sequencer

Example

Check it here: https://github.com/20tab/UnrealEnginePython/blob/master/examples/sequencer_scripting.py