【UE4】修改Material.cpp写入自己的标记
为什么要这么做,你懂的!
修改其实很简单,只需要在UMaterial::Serialize函数写入字段即可。直接粘代码了。

值得注意的是:在Loading时,需要做数据有效性检查,FArchive不要越界了。

有写入就会有还原,还原时应该怎么做呢?
遍历整个Content目录,加载Material.uasset并保存就可以了。
UObject* MatObject = LoadObject<UObject>(NULL, TEXT("/Game/Common/PBR_Parent_Material/M_Screen_Parent01.M_Screen_Parent01"));
TArray<UPackage*> PackagesToSave;
checkf(((MatObject != nullptr) && MatObject->IsAsset()), TEXT("Invalid object to save: %s"), (MatObject != nullptr) ? *MatObject->GetFullName() : TEXT("Null Object"));
PackagesToSave.Add(MatObject->GetOutermost());
FEditorFileUtils::EPromptReturnCode ReturnCode = FEditorFileUtils::PromptForCheckoutAndSave(PackagesToSave, false , /*bPromptToSave=*/ false);
关卡也可以保存:
UObject* LevelObject = LoadObject<UObject>(NULL, TEXT("/Game/gameupdater/scene/TestLoadMap.TestLoadMap"));
bool bReturnCode = false;
UWorld* theWorld = Cast<UWorld>(LevelObject);
UClass* clz = LevelObject->GetClass();
Level = theWorld->GetLevel(0);
if (Level && FEditorFileUtils::PromptToCheckoutLevels(false, Level))
{
bReturnCode = FEditorFileUtils::SaveLevel(Level);
}