← SEARCHABLE ARCHIVE
Unreal Engine · 2026-07-07

使用 SaveGame 建立永久名單

為什麼儲存資料和FGuid而不是Actor

INTERACTIVE READING MODE →

該部落格上撰寫的文章是出於教學目的而創建的。 另外,文章中的資訊可能不正確,請謹慎。

將戰鬥 Actor 本身放入 SaveGame 並不意味著相同的角色會在下一次運行中返回。 由於Actor目前是世界上的一個對象,因此必須將其轉換為可以儲存的純資料。

在 ProjectTB 中,名冊角色FTBRosterUnitData將其儲存為

USTRUCT(BlueprintType)
struct FTBRosterUnitData
{
    GENERATED_BODY()

    UPROPERTY()
    FGuid UnitInstanceId;

    UPROPERTY()
    ETBUnitClass UnitClass;

    UPROPERTY()
    int32 Level = 1;

    UPROPERTY()
    int32 Experience = 0;

    UPROPERTY()
    TArray<FName> AcquiredTraitIds;
};

區分類和實例

即使劍士職業相同,每個角色的等級、裝備、特質也不同。 FGuid使用 ,即使排列順序發生變化,您也可以再次找到特定字元。

UnitClass:它是什麼類型的單元?
UnitInstanceId:這個角色是誰?

當戰鬥開始時,使用保存資料產生一個 Actor,當戰鬥結束時,倖存 Actor 的狀態會反映回名冊資料中。

永久死亡立即拯救

在 ProjectTB 中,當盟友死亡時,他們會從名冊和選擇清單中刪除並立即保存。 這是因為如果你只在戰鬥結束時保存,死亡可以透過強制退出來逆轉。

相反,如果保存點太多,磁碟存取就會變得頻繁。 確定重要的狀態變化點並CaptureSaveGame()在路徑中建立保存資料可以減少遺漏。

SaveGame 設計的關鍵不是以原樣保存物件。 再次配置遊戲所需的最少資料以穩定的 ID 儲存。