UE4 AssetToolss的基本使用

一. 什么是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

猜你喜欢

转载自blog.csdn.net/u012999985/article/details/79244719