本教程向您展示了如何在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中文网其他相关文章!