内容纲要

UE在开发过程中,我们希望可以通过UE提供的委托类快速Hook某个事件,用于添加我们自己的操作。
在这个时候,就可以使用UE内置的FXXXXDelegates类在执行时分发到我们自己的函数上。

编辑器委托事件

使用FEditorDelegates类,主要负责处理编辑器相关内容。
例如进入PIE,保存关卡,切换地图等。
需要加入模块UnrealEd

开始&停止PIE时

FEditorDelegates::BeginPIE
FEditorDelegates::EndPIE

不需要特别的参数,需要的时候可以使用AddRaw或AddUObject
代理自己对应的函数即可正常使用。

当打开地图&切换地图时

//参数> (uint32);
FEditorDelegates::MapChange;
//参数> (const FString&, bool) //(文件名, 作为Template)
FEditorDelegates::OnMapChaned;

MapChange在切换地图时被调用,OnMapChanged为当地图打开后,
刚启动编辑器时也会触发一次。

世界大纲委托事件

使用FSceneOutlinerDelegates类,此类主要作用于
捕获编辑器切换选中物体,或切换选择组件时。
另外还可以用在当组件刷新时。需要调用内置Get()函数,
得到实例化对象,否则无法正常得到委托变量。
需要加入模块SceneOutliner

当选中Actor或组件时

FSceneOutLinerDelegates::Get().SelectionChanged;
FSceneOutLinerDelegates::Get().OnComponentSelectionChanged;

在选中Actor或组件时选择性触发上述函数。

查看当前选择的Actor
//调用GEditor中的GetSelectedActors函数
GEditor->GetSelectedActors();
//此函数返回USelection类,可以调用GetSelectedObjects函数得到选择的数组
USelection* Selection = GEditor->GetSelectedActors();
TArray<UObject*>SelectedObjects;
Selection->GetSelectedObjects(SelectedObjects);
控制编辑器选中新Actor
//参数> AActor* Actor, bool bInSelected, bool bNotify, bool bSelectEvenIfHidden = false, bool bForceRefresh = false
GEditor->SelectActor();

此函数的函数体在EditorEngine.h文件中已经被实现,但函数体为空。
函数在其子类UUnrealEdEngine类中被重写,且实现文件在EditorSelectUtils.cpp文件中。

Related Posts

发表回复

同步Schの秘密防空洞