我们想要在自定义的EdMode中使用Sequencer来进行预览和编辑,但是发现打开LevelSequence会导致自定义的EdMode被关闭,从而无法在EdMode中使用LevelSequence,甚至会导致崩溃。
查看代码发现是因为FSkeletalAnimationTrackEditor在OnInitialize初始化和FLevelEditorSequencerIntegration::AddSequencer时切换了默认Mode而导致其他Mode都被关闭。
[Image Removed]
看到注释描述,是因为FEditorModeTools::Tick可能没跑到,导致初始情况出问题,所以才调用的,说是一个UE-143791应用上就能移除了,但我去UE的github上去搜了一下,这段代码还未被移除,而UE-143791也没搜到有提交。这段代码的提交是在2022年3月的,还没修,不知道是没法修还是忘了。这部分代码的提交链接:https://github.com/EpicGames/UnrealEngine/commit/1d2865048c3d19eb9b5496518fad92a296f31e79
[Image Removed]
FEditorModeTools::Tick中实际就是发现如果没有Active的Mode就Active默认Mode,防止Mode为空,不过ActiveScriptableModes变量为Protect,并且没有提供获取Num之类的接口,所以外面无法根据情况判断是否要切换为默认Mode,结果就粗暴的直接设置了默认Mode。
[Image Removed]
FLevelEditorSequencerIntegration这边的调用堆栈是这样。
[Image Removed]
想问这段代码是否是忘记移除了?现在移除是否安全?如果不移除,在FEditorModeTools中添加个类似HasActiveMode的接口,让FSkeletalAnimationTrackEditor和FLevelEditorSequencerIntegration可以根据情况没有ActiveMode再调用ActivateDefaultMode是否可行?