您的位置:首页 > 产品设计 > UI/UE

UE4 自定义Asset

2017-05-10 17:25 302 查看
1.

首先看一下UML图:



这是一个动画状态机的Asset类型。

 class FCreatureAnimStateMachineAssetTypeActions : public FAssetTypeAcctions_Base 这里决定了要创建的Asset的类型。

方法

UClass * FMyCustomStateMachineAssetTypeActions::GetSupportedClass() const

{
return UMyCustomStateMachine::StaticClass();

}

决定了支持的类型。

上面 

class FCreatureAnimStateMachineEditor : public FAssetEditortToolkit  定义Asset的界面UI。 资源UI都要继承FAssetEditorToolkit 来进行UI自定义。

2.加载到Eidtor

FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked<FPropertyEditorModule>("PropertyEditor");

PropertyModule.RegisterCustomClassLayout("MyCustomStateMachine", FOnGetDetailCustomizationInstance::CreateStatic(&FMyCustomStateMachineDetail::MakeInstance));

//get asset tools
IAssetTools& AssetTools = FModuleManager::LoadModuleChecked<FAssetToolsModule>("AssetTools").Get();

EAssetTypeCategories::Type CreatureAssetCategoryBit = AssetTools.RegisterAdvancedAssetCategory(FName(TEXT("MyCustomAssetCategory")), LOCTEXT("MyCustomAssetCategory", "CustomStateMachine"));

AssetTools.RegisterAssetTypeActions(MakeShareable(new FMyCustomStateMachineAssetTypeActions(CreatureAssetCategoryBit)));


这里LoadAssetTools 然后RegisterAdvancedAssetCategory ,注册在

右键的选项。

之后 RegisterAssetTypeActions 加载自己定义的Asset类型到子节点。

3. 之后需要定义自己的Factory 

class CUSTOMFSMUI_API UMyCustomStateMachineFactory : public UFactory

构造函数中制定SupportClass。

重写FactoryCreateNew 来处理创建Asset操作。 这里在编辑器中创建资源的时候会调用。

经过这三步,已经可以自定义Asset了。

4.打开资源操作还需要在FCreatureAnimStateMachineAssetTypeActions 重写OpenAssetEditor ,

    调用 FCreatureAnimStateMachineEditor  来对UI进行处理。

5.自定义布局

class CUSTOMFSMUI_API FMyCustomStateMachineEditor : public FAssetEditorToolkit
{
public:
FMyCustomStateMachineEditor();

//IToolKitInterface
virtual void RegisterTabSpawners(const TSharedRef<class FTabManager>& TabManagerIn) override;
virtual void UnregisterTabSpawners(const TSharedRef<class FTabManager>& TabManagerIn) override;
//EndIToolKitInterface

// FAssetEditorToolkit
virtual FName GetToolkitFName() const override;
virtual FText GetBaseToolkitName() const override;
virtual FText GetToolkitName() const override;
virtual FText GetToolkitToolTipText() const override;
virtual FLinearColor GetWorldCentricTabColorScale() const override;
virtual FString GetWorldCentricTabPrefix() const override;
virtual void OnToolkitHostingStarted(const TSharedRef< class IToolkit >& Toolkit) override;
virtual void OnToolkitHostingFinished(const TSharedRef< class IToolkit >& TfNodeActionoolkit) override;

void InitStateMachineEditor(const EToolkitMode::Type Mode, const TSharedPtr< class IToolkitHost >& InitToolkitHost, class UMyCustomStateMachine* StateMachine);


这里看最开始的UML图,继承FAssetEditorToolkit 来自定义打开Asset的UI布局。

要自定义蓝图编辑窗口,看下面的UML



这里需要自定义

class UCreatureStatemachineGraph : public UEdGraph 来作为蓝图编辑界面

继续看下面的UML图



在自定义Graph中还需要在构造函数中设置父类的Schema。

这些都设置好,现在可以打开自定义Asset,并且看到蓝图编辑窗口了。

只不过蓝图编辑窗口还需要创建一些状态节点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: