UE4:FSequencer的BakeTransform封装到蓝图
问题
美术有需要将Level Sequence进行BakeTransform然后导出fbx到其他软件中工作的需求,在这中间TA大佬还需要用Python脚本或者蓝图脚本来进行一些流水线处理,但是
1 |
|
是FSequencer的成员函数,非UFUNCTION,需要想办法再包一层给到蓝图的Library中
那么问题来了,我们获取到的ULevelSequence和FSequencer还有相当长的距离……
解决办法
由于这个问题已经有一段时间了,具体的解决过程就是翻源码看看,具体的过程也不必要赘述,这里直接写最后的解决方案
和TA大佬约定,我提供一个蓝图方法,传入参数为ULevelSequence*,我对这个对象执行BakeTransform
在我各种查看源码后,发现有这个东西FLevelEditorSequencerIntegration,该类定义的时候有SEQUENCER_API,是一个纯c++类,但是可以导出
并且其有成员方法:AddSequencer;RemoveSequencer;GetSequencers
通过这个GetSequencers可以获取TArray<TWeakPtr
再对ISequencer进行StaticCast可以获取到FSequence
拿到FSequencer之后可以通过GetFocusedMovieSceneSequence()方法获取 UMovieSceneSequence
最后通过 UMovieSceneSequence的GetMovieScene方法可以获取一个UMovieScene
而通过参数传进来的ULevelSequence可以直接GetMovieScene获取一个UMovieScene
如果这两个UMovieScene相同,则能从FLevelEditorSequencerIntegration的GetSequencers获取的一堆ISequencer中确定我们需要的那个FSequencer,然后调用一下BakeTransform即可
将以上过程封装为FLevelEditorSequencerIntegration的一个成员函数,最后在蓝图Library再封装一层给到蓝图就完成啦
源码贴到这里
1 |
|