Game Save 衝突和不可部分完成單位
概觀
當您在多部裝置上修改相同的遊戲資料時,就會發生存檔衝突。系統需要決定要保留哪個版本。若要設計您的存檔資料結構,您需要了解系統如何偵測和解決衝突。衝突何時發生
只有在下列所有條件都成立時,同步作業 (PFGameSaveFilesAddUserWithUiAsync) 期間才會發生衝突:
- 存在本機變更:您自上次同步以來在本機修改了檔案。
- 存在雲端變更:另一部裝置自上次同步以來上傳了較新的資料。
- 相同的不可部分完成單位:兩項變更都位於相同的根層級資料夾中。
衝突偵測矩陣
什麼是不可部分完成單位?
某些檔案同步系統會逐一檔案處理衝突。如果同一個檔案需要上傳和下載,就會發生衝突。在 Game Saves 中,每個根層級子資料夾都被視為一個不可部分完成單位。每個根層級子資料夾都是一個不可部分完成單位。
- 維護資料完整性:相互依存的檔案會一起保持一致
- 提供隔離:個別資料夾中的獨立資料可以同步而不會發生衝突
- 將衝突降至最低:不同裝置上對不同不可部分完成單位的變更會自動合併
存檔結構範例
衝突案例
根層級檔案:特殊情況
存檔根目錄中的所有檔案共用一個不可部分完成單位。 系統會將您直接放在存檔根目錄 (不在任何子資料夾中) 的所有檔案一起分組為單一不可部分完成單位。如果您在本機修改一個根層級檔案,而另一部裝置修改另一個不同的根層級檔案,此差異就會觸發衝突。使用者選擇選項
發生衝突時,玩家可以選擇:- 使用本機資料 (保留本機):保留裝置目前的存檔資料。
- 使用雲端資料 (保留雲端):下載並使用雲端存檔資料。
重要:解決方式是全有或全無
⚠️ 重要:雖然不可部分完成單位決定何時偵測到衝突,但使用者的衝突解決選擇會套用至整個存檔,而不是個別的不可部分完成單位。
範例:混合衝突案例
為什麼這很重要
- 保留本機會遺失僅限雲端的變更:如果您因為 SlotA 中的衝突而選擇「保留本機」,就不會收到另一部裝置對 SlotC 所做的雲端更新。
- 保留雲端會遺失僅限本機的變更:如果您選擇「保留雲端」,雲端狀態會覆寫您對 SlotB 和 SlotD 的本機變更。
- 可以回復:這兩種選擇都會保留捨棄的分支,以供日後回復使用。
設計摘要
這種全有或全無的做法簡化了玩家體驗。雖然依不可部分完成單位解決在技術上能維持資料一致性 (因為不可部分完成單位定義了一致性界限),但它會造成使用者體驗上的挑戰:
- 玩家需要了解不可部分完成單位和資料夾界限的概念。
- 混合的結果 (某些資料夾來自本機,其他來自雲端) 可能會讓玩家對最終狀態感到困惑。
- 針對每個衝突的不可部分完成單位分別提示,會讓衝突解決變得令人不知所措。
不會發生衝突的情況
兩端都刪除
如果兩部裝置都刪除相同的檔案 (或相同不可部分完成單位中的檔案),就不會發生衝突。系統會識別出兩部裝置都同意應移除該檔案。不同不可部分完成單位中的變更
如果裝置 A 修改SlotA/ 中的檔案,而裝置 B 修改 SlotB/ 中的檔案,就不會發生衝突。同步會自動合併這兩項變更。
最佳做法
1. 仔細設計資料夾結構
針對獨立的存檔單位使用子資料夾:- 共用參考資料:將任何存檔欄位都可能使用的資料 (例如已解鎖的內容或成就) 儲存在其自己的子資料夾中,使其獨立於個別存檔欄位進行同步。
- 大型資產集合:如果您的遊戲儲存了獨立更新的大型檔案集 (例如下載的內容套件或使用者建立的關卡),請考慮將它們分割成多個根子資料夾,讓某個集合的更新不會與另一個集合的更新發生衝突。
