vault backup: 2023-12-08 12:34:00
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
## 自定义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<UVrmRuntimeSettings>();
|
||||
|
||||
{
|
||||
FSoftObjectPath r = Settings->AssetListObject; //(TEXT("/VRM4U/VrmObjectListBP.VrmObjectListBP"));
|
||||
UObject *u = r.TryLoad();
|
||||
if (u) {
|
||||
if (Cast<UBlueprint>(u)) {
|
||||
c = (UClass*)(Cast<UBlueprint>(u)->GeneratedClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (c == nullptr) {
|
||||
FSoftObjectPath r(TEXT("/VRM4U/VrmAssetListObjectBP.VrmAssetListObjectBP"));
|
||||
UObject *u = r.TryLoad();
|
||||
if (u) {
|
||||
c = (UClass*)(Cast<UBlueprint>(u)->GeneratedClass);
|
||||
}
|
||||
}
|
||||
|
||||
if (c == nullptr) {
|
||||
c = UVrmAssetListObject::StaticClass();
|
||||
}
|
||||
|
||||
m = NewObject<UVrmAssetListObject>((UObject*)GetTransientPackage(), c.Get());
|
||||
}
|
||||
|
||||
UVrmAssetListObject* mret = nullptr;
|
||||
if (m) {
|
||||
//auto a = NewObject<UVrmAssetListObject>(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<UPackage>(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);
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user