【UE4】修改Material.cpp寫入自己的標(biāo)記
????為什么要這么做,你懂的!
????修改其實(shí)很簡(jiǎn)單,只需要在UMaterial::Serialize函數(shù)寫入字段即可。直接粘代碼了。

值得注意的是:在Loading時(shí),需要做數(shù)據(jù)有效性檢查,F(xiàn)Archive不要越界了。

有寫入就會(huì)有還原,還原時(shí)應(yīng)該怎么做呢?
遍歷整個(gè)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);
關(guān)卡也可以保存:
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);
}