UE – 得到序列编辑器面板的记录与踩坑の事(其一)

内容纲要

在UE5中进行开发的时候,如果想得到编辑器的面板应该怎么做呢?!

<--------比如在打开这个文件的时候,弹出的如下面板。
"哈哈"

想得到此面板的话在代码层实现也是非常的简单,首先现在模块中引入一些依赖包

PrivateDependencyModuleNames.AddRange(
    {
        "Sequencer",
        "SequencerWidgets",
        "MovieScene",
        "MovieSceneTools",
        "LevelSequenceEditor",
    }
);

接下来是头文件

#include "ISequencer.h"
#include "LevelSequence.h"
#include "LevelEditorSubsystem.h"
#include "ILevelSequenceEditorToolkit.h"
#include "Subsystems/AssetEditorSubsystem.h"

首先思路如下,先使用GetEditorSubsystem函数得到编辑器中正在运行的AssetEditorSubsystem。
这个子系统主要负责处理编辑器的资源,同时也提供了例如打开资源的委托可供我们捕获。
使用此子系统中的FindEditorForAsset函数可以快速找到参数Object所对应打开的编辑器实例接口。

IAssetEditorInstance* Editor = GEditor->GetEditorSubsystem<UAssetEditorSubsystem>()->FindEditorForAeest(**Object**, false);

在这里有一个坑要值得注意,FindEditorForAsset函数在被调用的时候,编辑器面板必须存在才可以让返回的IAssetEditorInstance,亦或者说返回的ILevelSequenceEditorToolkit中的Sequencer成员变量的值被设置,否则的话虽然返回了接口,但接口中并没有实质的Sequener可以被调用。

所以呢,执行此函数之前最好确保编辑器已经被成功创建,所以在这里我们使用UAssetEditorSubsystem中的OnAssetOpenedInEditor委托,挂载一个函数用于处理编辑器打开后的内容执行,将如上寻找代码放置到委托中,Sequener则会返回对应的编辑器对象了。

AssetEditorSubsystem->OnAssetOpenedInEditor().AddRaw(this, &FPVPRenderModule::OnOpenAssets);

接下来用转换将编辑器实例接口转换到自己需求的对应接口上便可以了,对于关卡序列来说,这里需要使用ILevelSequenceEditorToolkit接口。

ILevelSequenceEditorToolkit* LevelSequenceEditorToolkit = (ILevelSequenceEditorToolkit*)Editor;

你也可以用C++风格的静态转换对其进行转换。

ILevelSequenceEditorToolkit* LevelSequenceEditorToolkit = static_cast<ILevelSequenceEditorToolkit*>(Editor);

最后呢,可以直接用转换过的接口类,得到你想要的东西,并进行对应的委托啊,函数调用啊,怎么用看个人。

LevelSequenceEditorToolkit->GetSequencer().Get()->OnBeginScrubbingEvent();

参考链接(可能是远古版本,与我写的不一样,但介于目前只有这么一篇文章可供参考,需要对知识进行转化。)
https://forums.unrealengine.com/t/how-can-i-used-fsequencer-to-c-levelsequencer/476040/2

Related Posts

One thought on “UE – 得到序列编辑器面板的记录与踩坑の事(其一)

发表回复

同步Schの秘密防空洞