本教程向您展示瞭如何在Unity遊戲中實現保存/加載遊戲功能。 我們將保存播放器數據,例如級別,位置和統計信息。
>
>您可以使用以前的跨場所保存教程中的項目進行測試。
密鑰概念:
PlayerStatistics
保存:PlayerStatistics
>至關重要的是,使用後關閉GlobalObject
>下載:Stream
完成項目下載(本文末尾)
詳細說明:
獲取包含玩家數據的類
>將其序列化到硬盤驅動器上的已知文件。
加載數據:
> 將施加到您的數據類類型。
object
object
>玩家的位置(三個浮子:x,y,z)。 >
PlayerStatistics
>
播放器位置:>將三個浮子(x,y,z)添加到
>(變換和vector3s不直接序列化)。PlayerStatistics
>
PlayerStatistics
>
密鑰點:
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。保存/加載
:PlayerControl
>
Update()
//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中文網其他相關文章!