UE – LevelSequence编辑器的轨道添加与调用

内容纲要

在Sequence的程序开发过程中,若是想对Editor模式下的Sequence编辑器面板添加新的轨道的话,需要使用UMovieScene***Track类。
file
如图所示,在图中UE还提供了其他成分的类作为要添加轨道的类型,在此笔记中将会使用UMovieSceneIntegerTrack作为示例。

//使用AddTrack函数初始化UMovieSceneIntegerTrack的实例化对象。
UMovieSceneIntegerTrack* TimeCodeSecond = MovieSequence->GetMovieScene()->AddTrack<UMovieSceneIntegerTrack>(Guid);
//接下来使用SetDisplayName设置Track类在Sequence中显示的名字。
TimeCodeSecond->SetDisplayName(FText::FromString(TEXT("拍摄时间码_秒")));

//使用创建的Track生成新的Section,并尝试将其转换到对应的UMovieSceneIntegerTrack类上。
UMovieSceneIntegerSection* Section = Cast<UMovieSceneIntegerSection>(TimeCodeSecond->CreateNewSection());
...未完待续

...
在C++中得到已经创建的轨道。LevelSequenceEditorToolkit获得方法跳转至此

//得到所有当前绑定在Sequence上的Object,UMovieSceneSequence是LevelSequence的资源类。
//如此一来就能得到在Sequence中所有的Object了。
LevelSequenceEditorToolkit->GetSequencer().Get()->GetRootMovieSceneSequence()->GetMovieScene()->GetBindings();

若是想得到Binding的轨道名称的话,可以使用ForLoop对Bindings进行循环。

for (FMovieSceneBinding Binding : Bindings)
{
    //每个Binding是绑定在当前LevelSequence上面的Object。
    //每个绑定的Object同时又有很多子轨道,使用GetTracks函数获得子轨道
    for (UMovieSceneTrack* MovieSceneTrack : Binding.GetTracks())
    {
        //得到轨道的内部命名 ***_0, ***_1
        MovieSceneTrack->GetName();

        //得到轨道的显示命名
        MovieSceneTrack->GetTrackName().ToString();//到字符串

        //尝试将UMovieSceneTrack转换到对应类型的一种。
        //UMovieSceneIntegerTrack可以是上述图的任意一个。
        //TimeCodeFrame是示例名称。
        UMovieSceneIntegerTrack* TimeCodeFrame = Cast<UMovieSceneIntegerTrack>(MovieSceneTrack)
    }
}

若是想得到某一个轨道的长度,可以通过得到Section的方式,得到Section类中的Range。

for (UMovieSceneSection* MovieSceneSection : TimeCodeFrame->GetAllSections())
{
    //使用Track类中的GetAllSections函数得到所有的MovieSceneSection。
    //用MovieSceneSection中的GetRange函数返回TRange,这便是Section的Range。
    TRange<FFrameNumber>Range = MovieSceneSection->GetRange();
    //FFrameNumber::Value()可以直接将内部类型转换为int32。

    const FFrameNumber Low = Range.GetLowerBoundValue();
    const FFrameNumber High = Range.GetUpperBoundValue();
    SCHLOG("%d", Low.Value);
    SCHLOG("%d", High.Value);
}
TRange<FFrameNumber>Range = MovieSceneSection

Related Posts

发表回复

同步Schの秘密防空洞