[{"data":1,"prerenderedAt":146},["ShallowReactive",2],{"\u002F2021-05-30-ue4-add-new-asset-type":3},{"id":4,"title":5,"body":6,"date":123,"description":12,"extension":124,"meta":125,"navigation":128,"path":140,"seo":141,"stem":142,"tags":143,"__hash__":145},"blogs\u002F_legacy\u002F2021\u002F2021-05-30-ue4-add-new-asset-type.md","UE4新增Asset类型",{"type":7,"value":8,"toc":116},"minimark",[9,13,16,19,24,27,30,41,44,47,53,56,62,65,71,75,78,89,95,98,104,107,110,113],[10,11,12],"p",{},"想要在编辑器里面添加新的Asset类型，算是比较常见又不是经常使用的需求。",[10,14,15],{},"当前UE4版本为4.26.2。",[10,17,18],{},"虽然本身并不复杂，但是每次添加的时候如果项目中没有相关的代码，就又要去查一次。不然总是会在一些奇怪的地方卡住导致在编辑器中无法使用的情况。因此在这里记录一下，方便下次查找。",[20,21,23],"h2",{"id":22},"ufactory继承","UFactory继承",[10,25,26],{},"首先需要继承UFactory，直接用UE4添加类，或者自己写即可。",[10,28,29],{},"覆盖掉下面的函数：",[31,32,37],"pre",{"className":33,"code":35,"language":36},[34],"language-text","virtual UObject* FactoryCreateNew(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override;\nvirtual bool ShouldShowInNewMenu() const override;\n","text",[38,39,35],"code",{"__ignoreMap":40},"",[10,42,43],{},"ShouldShowInNewMenu直接返回True则可用在编辑器的右键新建的菜单中出现。",[10,45,46],{},"FactoryCreateNew则直接新建一个对应类型的Object即可：",[31,48,51],{"className":49,"code":50,"language":36},[34],"return NewObject\u003CUMyObjectType>(InParent, InClass, InName, Flags);\n",[38,52,50],{"__ignoreMap":40},[10,54,55],{},"同时需要在构造函数中初始化一些设置",[31,57,60],{"className":58,"code":59,"language":36},[34],"\nSupportedClass = UMyObjectType::StaticClass();\nbCreateNew = true;\nbEditAfterNew = true;\n\n",[38,61,59],{"__ignoreMap":40},[10,63,64],{},"如果遇到了一些奇怪的链接问题，可以先检查下是否在模块的build.cs中包含了UnrealEd。",[31,66,69],{"className":67,"code":68,"language":36},[34],"PrivateDependencyModuleNames.AddRange(\n  new string[]\n  {\n    \"CoreUObject\",\n    \"Engine\",\n    \"UnrealEd\",\n  }\n);\n\n",[38,70,68],{"__ignoreMap":40},[20,72,74],{"id":73},"assettypeactions","AssetTypeActions",[10,76,77],{},"之前的版本有上面的操作就可以了，但是目前4.26的版本需要额外的操作才能在编辑器中看到新建按钮。",[10,79,80,81,84,85,88],{},"定义一个新的类继承自",[38,82,83],{},"FAssetTypeActions_Base","，一个比较好的参考是",[38,86,87],{},"FAssetTypeActions_DataAsset","。",[31,90,93],{"className":91,"code":92,"language":36},[34],"class FAssetTypeActions_DataAsset : public FAssetTypeActions_Base\n{\npublic:\n  \u002F\u002F IAssetTypeActions Implementation\n  virtual FText GetName() const override { return NSLOCTEXT(\"AssetTypeActions\", \"AssetTypeActions_DataAsset\", \"Data Asset\"); }\n  virtual FColor GetTypeColor() const override { return FColor(201, 29, 85); }\n  virtual UClass* GetSupportedClass() const override { return UDataAsset::StaticClass(); }\n  virtual uint32 GetCategories() override { return EAssetTypeCategories::Misc; }\n};\n",[38,94,92],{"__ignoreMap":40},[10,96,97],{},"无需额外的定义，之后在Module的Start的地方进行注册即可",[31,99,102],{"className":100,"code":101,"language":36},[34],"void FAwesomeEdModule::StartupModule()\n{\n    IAssetTools& AssetTools = FModuleManager::LoadModuleChecked\u003CFAssetToolsModule>(\"AssetTools\").Get();\n    AssetTools.RegisterAssetTypeActions(MakeShareable(new FAwesomeAssetAction));\n}\n",[38,103,101],{"__ignoreMap":40},[10,105,106],{},"其中FAwesomeAssetAction就是新定义的AssetTypeAction。",[20,108,109],{"id":109},"总结",[10,111,112],{},"由于这种功能一般加一次就会不管了，下一次在别的地方要用到的时候才发现API已经变了。由于本身操作不是很熟悉，很难把握是自己操作有误还是其他因素引起的。",[10,114,115],{},"总之这边记录的是当前版本的可行操作，之后的版本不行的话就可以判断可能是API有改变。",{"title":40,"searchDepth":117,"depth":118,"links":119},2,3,[120,121,122],{"id":22,"depth":117,"text":23},{"id":73,"depth":117,"text":74},{"id":109,"depth":117,"text":109},"2021-05-30","md",{"layout":126,"status":127,"published":128,"author":129,"author_login":130,"author_email":131,"author_url":132,"wordpress_id":133,"wordpress_url":134,"date_gmt":135,"excerpt":136},"post","publish",true,{"display_name":130,"login":130,"email":131,"url":132},"chaoshikari","chaoshikari@gmail.com","\u002F",3508,"\u002F?p=3508","2021-05-30 13:15:20 +0000",{"type":7,"value":137},[138],[10,139,12],{},"\u002F2021-05-30-ue4-add-new-asset-type",{"title":5,"description":12},"_legacy\u002F2021\u002F2021-05-30-ue4-add-new-asset-type",[144],"UE4","LHeIYSAW7BjCYwrB_XV063tftDjPQLdpuY96Lu-v7xc",1788763177174]