## 自定义Asset https://zhuanlan.zhihu.com/p/77812246 - FAssetTypeActions_Base:是对已经创建好的资源操作函数的封装。这个资源在内容浏览器中的颜色,类型名字,显示的缩略图。 - UFactory:这个是创建自定义类型文件的入口。以及创建资源的二级菜单。 - UBlueprint: 创建继承类,来实现一个新的视图编辑窗口 - UXXXX : Public Object : 这里面存储我们要编辑的数据 VRM中对应类为: - FAssetTypeActions_VrmAssetList、UVrmAssetListThumbnailRenderer - UVRM4UImporterFactory - UVrmAssetListObject ## Assimp 资源工厂类中:UVRM4UImporterFactory::FactoryCreateBinary ``` { const UVrmRuntimeSettings* Settings = GetDefault(); { FSoftObjectPath r = Settings->AssetListObject; //(TEXT("/VRM4U/VrmObjectListBP.VrmObjectListBP")); UObject *u = r.TryLoad(); if (u) { if (Cast(u)) { c = (UClass*)(Cast(u)->GeneratedClass); } } } if (c == nullptr) { FSoftObjectPath r(TEXT("/VRM4U/VrmAssetListObjectBP.VrmAssetListObjectBP")); UObject *u = r.TryLoad(); if (u) { c = (UClass*)(Cast(u)->GeneratedClass); } } if (c == nullptr) { c = UVrmAssetListObject::StaticClass(); } m = NewObject((UObject*)GetTransientPackage(), c.Get()); } UVrmAssetListObject* mret = nullptr; if (m) { //auto a = NewObject(MatClass.Object, NAME_None, RF_Transactional); //MatClass.Object; //ULoaderBPFunctionLibrary::LoadVRMFile(nullptr, fullFileName); GWarn->BeginSlowTask( NSLOCTEXT("UnrealEd", "ImportVRM", "Importing VRM"), true ); int ret = true; auto &g = VRMConverter::Options::Get(); g.SetVrmOption(ImportUI->GenerateOptionData()); ULoaderBPFunctionLibrary::SetImportMode(true, Cast(InParent)); { ret = ULoaderBPFunctionLibrary::LoadVRMFileLocal(m.Get(), mret, fullFileName); } } ``` 蓝图函数库中:bool ULoaderBPFunctionLibrary::LoadVRMFileFromMemory()。 ``` Assimp::Importer mImporter; const aiScene* mScenePtr = nullptr; // delete by Assimp::Importer::~Importer mScenePtr = mImporter.ReadFileFromMemory(pFileDataData, dataSize, aiProcess_Triangulate | aiProcess_MakeLeftHanded | aiProcess_CalcTangentSpace | aiProcess_GenSmoothNormals | aiProcess_OptimizeMeshes, e.c_str()); if (mScenePtr == nullptr) { std::string file; file = utf_16_to_shift_jis(*filepath); mScenePtr = mImporter.ReadFile(file, aiProcess_Triangulate | aiProcess_MakeLeftHanded | aiProcess_CalcTangentSpace | aiProcess_GenSmoothNormals | aiProcess_OptimizeMeshes); } ```