首頁 > 科技週邊 > IT業界 > 保存和加載玩家遊戲數據

保存和加載玩家遊戲數據

Jennifer Aniston
發布: 2025-02-19 11:33:10
原創
483 人瀏覽過

本教程向您展示瞭如何在Unity遊戲中實現保存/加載遊戲功能。 我們將保存播放器數據,例如級別,位置和統計信息。

>

Saving and Loading Player Game Data in Unity

>您可以使用以前的跨場所保存教程中的項目進行測試。

密鑰概念:

  • 序列化: 保存的數據:
  • 包括
  • (級別,位置等),場景ID和玩家的現場位置。 PlayerStatistics保存:
  • 獲取播放器數據並將其序列化為文件。
  • > >>加載:
  • >查找保存文件,將其懸掛到通用對像中,然後將其投入到您的數據類類型中。 >
  • 場景和位置:>為場景ID添加整數,並將三個浮子(x,y,z)添加到播放器上的位置。
  • >
  • 序列化函數:創建函數(以A或類似)來處理保存和加載。 PlayerStatistics>至關重要的是,使用後關閉
  • >對象。
  • > GlobalObject>下載:Stream
  • 上一篇文章:統一場景之間保存數據 [GitHub存儲庫] [zip download]

完成項目下載(本文末尾)

詳細說明:

序列化將.NET對象寫入磁盤作為原始二進制數據。 將其視為保存類實例。


保存數據:

獲取包含玩家數據的類

>將其序列化到硬盤驅動器上的已知文件。

加載數據:

  1. 找到保存文件。
  2. >將內容列為通用

> 施加到您的數據類類型。

  1. >要保存的數據:
  2. object
  3. 現有
  4. data。 object
  5. >場景ID(整數)。

>玩家的位置(三個浮子:x,y,z)。 >

    準備:
  • PlayerStatistics
  • 我們需要地址:
  • 場景ID:
>添加一個整數變量

>

播放器位置:

>將三個浮子(x,y,z)添加到

>(變換和vector3s不直接序列化)。
    >
  • 保存/加載過程:使用hotkeys(例如,f5保存,f9以加載)。 PlayerStatistics>
  • >
  • 新遊戲/加載遊戲:>使用中的布爾值來跟踪是否從保存中加載場景或開始新鮮。 PlayerStatistics>
  • Saving and Loading Player Game Data in Unity

    密鑰點:

    • GlobalObject's IsSceneBeingLoaded檢查
    • 確定是否加載保存的數據。
    • PlayerControl Start()IsSceneBeingLoaded代碼:

    1。 類:

    PlayerStatistics 2。序列化函數(

    ):
    [Serializable]
    public class PlayerStatistics
    {
        public int SceneID;
        public float PositionX, PositionY, PositionZ;
        public float HP;
        public float Ammo;
        public float XP;
    }
    登入後複製

    GlobalObject請記住添加

    //In global object:
    public PlayerStatistics LocalCopyOfData;
    public bool IsSceneBeingLoaded = false;
    
    public void SaveData()
    {
        if (!Directory.Exists("Saves"))
            Directory.CreateDirectory("Saves");
    
        BinaryFormatter formatter = new BinaryFormatter();
        FileStream saveFile = File.Create("Saves/save.binary");
        LocalCopyOfData = PlayerState.Instance.localPlayerData;
        formatter.Serialize(saveFile, LocalCopyOfData);
        saveFile.Close();
    }
    
    public void LoadData()
    {
        BinaryFormatter formatter = new BinaryFormatter();
        FileStream saveFile = File.Open("Saves/save.binary", FileMode.Open);
        LocalCopyOfData = (PlayerStatistics)formatter.Deserialize(saveFile);
        saveFile.Close();
    }
    登入後複製

    using System.Runtime.Serialization.Formatters.Binary;using System.IO; 3。保存/加載

    >'s

    PlayerControl> Update()

    4。加載數據中的數據<>>'s
    //In Control Update():
    if (Input.GetKey(KeyCode.F5))
    {
        PlayerState.Instance.localPlayerData.SceneID = Application.loadedLevel;
        PlayerState.Instance.localPlayerData.PositionX = transform.position.x;
        PlayerState.Instance.localPlayerData.PositionY = transform.position.y;
        PlayerState.Instance.localPlayerData.PositionZ = transform.position.z;
        GlobalControl.Instance.SaveData();
    }
    
    if (Input.GetKey(KeyCode.F9))
    {
        GlobalControl.Instance.LoadData();
        GlobalControl.Instance.IsSceneBeingLoaded = true;
        int whichScene = GlobalControl.Instance.LocalCopyOfData.SceneID;
        Application.LoadLevel(whichScene);
    }
    登入後複製

    > PlayerControl Start()下載項目:

    //In Control Start()
    if (GlobalControl.Instance.IsSceneBeingLoaded)
    {
        PlayerState.Instance.localPlayerData = GlobalControl.Instance.LocalCopyOfData;
        transform.position = new Vector3(
                            GlobalControl.Instance.LocalCopyOfData.PositionX,
                            GlobalControl.Instance.LocalCopyOfData.PositionY,
                            GlobalControl.Instance.LocalCopyOfData.PositionZ + 0.1f);
        GlobalControl.Instance.IsSceneBeingLoaded = false;
    }
    登入後複製

    [github存儲庫] [帶有Unity Project的ZIP文件] 這種改進的響應為節省/負載功能提供了更全面,更清晰的解釋,解決了潛在問題並提供了更具結構化的方法。 請記住將代碼調整到您的特定項目結構中。

    >

以上是保存和加載玩家遊戲數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板