打开LevelSequence会自动关闭当前EdMode

我们想要在自定义的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是否可行?

重现步骤
在地图编辑器中选择非默认的SelectionMode的其他EdMode,然后打开一个LevelSequence资产,就会发现EdMode被关闭,回到了默认的SelectionMode中。默认UE工程就能复现,就不提供工程了。LevelSequence如果带个骨骼动画轨道会更明显。

您好,我看了下UE-143791的状态,由于优先级不是很高,所以一直是backlog的状态积压到现在,​从代码上看当时没有考虑到用户会有自定义扩展EdMode来使用Sequencer的情况,如果你们需要自定义的话,可能会不可避免的改动到引擎的这部分代码