Steps to reproduce:
- Drag a FBX into the content browser, import as Static Mesh, for example
- Right click on the new asset, go to bulk edit via Property Matrix
- Notice that the AssetImportData is of type FbxStaticMeshImportData, change some setting like LODGroup to something like LevelArchitecture
- Save that asset. If you open the .uasset file via hex editor you will notice that it has the .fbx file path, and your set LODGroup as a string inside it. So the AssetImportData is properly saved (I guess ?)
- Right click on the asset and choose Reimport. Notice that it properly reimports with no prompts.
- Restart the editor
- Right click on the asset and bulk edit property matrix again. Notice that the AssetImportData has now been loaded as a generic EMPTY AssetImportData.
- Try reimporting the asset. It will ask you for the fbx file path because of the EMPTY AssetImportData. Click cancel.
- Saving the asset now would permanently overwrite the good FbxStaticMeshAssetImportData with an EMPTY generic AssetImportData in the .uasset file. The original fbx path and import settings would then be permanently lost.
This is very BLOCKING as now i am unable to save any asset that came from a FBX file for the fear of losing the reimport data !
I did some investigation and the original FbxStaticMeshImportData seems to be properly deserialized, but the pointer to it is then overwritten to a generic AssetImportData from an ‘archetype object?’ in this callstack (got via data breakpoint):
> UE4Editor-CoreUObject-Win64-Debug.dll!UObjectProperty::SetObjectPropertyValue(void * PropertyValueAddress, UObject * Value) Line 66 C++
UE4Editor-CoreUObject-Win64-Debug.dll!UObjectPropertyBase::InstanceSubobjects(void * Data, const void * DefaultData, UObject * Owner, FObjectInstancingGraph * InstanceGraph) Line 35 C++
UE4Editor-CoreUObject-Win64-Debug.dll!UStruct::InstanceSubobjectTemplates(void * Data, const void * DefaultData, UStruct * DefaultStruct, UObject * Owner, FObjectInstancingGraph * InstanceGraph) Line 1664 C++
UE4Editor-CoreUObject-Win64-Debug.dll!UObject::InstanceSubobjectTemplates(FObjectInstancingGraph * InstanceGraph) Line 1958 C++
UE4Editor-CoreUObject-Win64-Debug.dll!UObject::PostLoadSubobjects(FObjectInstancingGraph * OuterInstanceGraph) Line 783 C++
UE4Editor-CoreUObject-Win64-Debug.dll!UObject::ConditionalPostLoadSubobjects(FObjectInstancingGraph * OuterInstanceGraph) Line 812 C++
UE4Editor-CoreUObject-Win64-Debug.dll!UObject::ConditionalPostLoad() Line 720 C++
As it’s some weird linker issue I do not have the sufficient knowledge to completely find the cause of the problem, please assign someone to investigate this.
ue4 4.9 github branch, commit 8f66c95f1d88ed4560258e35851a9974a48c6581