一. 什么是AssetTools
在..\Engine\Source\Developer路径下,Developer文件夹里面有UE4引擎的各项工具,包括日志输出工具MessageLog,崩溃显示工具CrashTracker等。每一个文件夹都是一个模块,都有一个Build.cs文件。
AssetTools是其中的一个模块,用来在编辑器里处理UE4的不同类型的资源文件并显示相关信息。
如上图所示,你可以右键对不同类型的资源做不同的操作,同时他也会在不同的时候显示不同的提示信息。如上图,对于map文件以及staticmesh文件,都用Common,Explore,Reference的菜单,不过staticmesh文件多了一个StaticMeshActions以及ImportedAsset菜单。其中StaticMeshActions就是通过AssetTools模块来完成自定义选项的。
那如果我们想对这个右键菜单做一些功能订制,我们要怎么做?首先我们可以进入Developer\AssetTools\Private\AssetTypeActions路径。然后随便打开一个头文件,比如AssetTypeActions_Blueprint.h,这个是对蓝图文件的相关操作。
class ASSETTOOLS_API FAssetTypeActions_Blueprint : public FAssetTypeActions_Base
会发现这些类都继承于FAssetTypeActions_Base类,同时我们还可以看到针对不同类型文件定义的Action操作。
不过有些基本的文件操作并不在AssetTools模块,而是在..\Engine\Source\Editor\
ContentBrowser模块里面,其中AssetContextMenu文件里面记录了Asset资源的基本操作。
二.向AssetTools添加快捷操作流程
头文件声明命令执行函数,并在对应资源类型里面GetActions函数里面添加注册:
/** Handler for when EditDefaults is selected */
void ExecuteEditDefaults(TArray<TWeakObjectPtr<UBlueprint>> Objects);
void FAssetTypeActions_Blueprint::GetActions( const TArray<UObject*>& InObjects, FMenuBuilder& MenuBuilder )
{
auto Blueprints = GetTypedWeakObjectPtrs<UBlueprint>(InObjects);
MenuBuilder.AddMenuEntry(
LOCTEXT("Blueprint_EditDefaults", "Edit Defaults"),
LOCTEXT("Blueprint_EditDefaultsTooltip", "Edits the default properties for the selected blueprints."),
FSlateIcon(),
FUIAction(FExecuteAction::CreateSP( this,&FAssetTypeActions_Blueprint::ExecuteEditDefaults, Blueprints ),FCanExecuteAction())
);
}
LOCTEXT(“Blueprint_EditDefaults”, “Edit Defaults”),用于本地化相关,第一个参数是Key,后面的要显示的文本信息。
当你鼠标的右键显示相关提示信息的时候,就会出现EditDefaults。点击EditDefaults就会执行ExecuteEditDefaults函数。该菜单是支持多级子菜单的,所以你可以在ExecuteEditDefaults函数里面继续添加MenuEntry。如下,
void FAssetTypeActions_Blueprint:: ExecuteEditDefaults (FMenuBuilder& MenuBuilder, const TArray<UObject*> InObjects)
{
auto Blueprints = GetTypedWeakObjectPtrs<UBlueprint>(InObjects);
MenuBuilder.AddMenuEntry(
LOCTEXT("Blueprint_ExecuteEditDefaultsA", "A Function"),
LOCTEXT("SpawnDinoSubmenu_ToolTipA", "Edit In A"),
FSlateIcon(),
FUIAction(FExecuteAction::CreateSP(this, &FAssetTypeActions_Blueprint::ExecuteEditDefaultsA, Blueprints, (bool)false),
FCanExecuteAction())
MenuBuilder.AddMenuEntry(
LOCTEXT("Blueprint_ExecuteEditDefaultsB", "B Function"),
LOCTEXT("SpawnDinoSubmenu_ToolTipB", "Edit In B"),
FSlateIcon(),
FUIAction(FExecuteAction::CreateSP(this, &FAssetTypeActions_Blueprint::ExecuteEditDefaultsB, Blueprints, (bool)false),
FCanExecuteAction())
}
这样的话你还需要继续声明与编写ExecuteEditDefaultsA与ExecuteEditDefaultsB函数。
原文链接(转载请标明):http://blog.csdn.net/u012999985/article/details/79244719