首页 > 科技周边 > IT业界 > 保存和加载玩家游戏数据

保存和加载玩家游戏数据

Jennifer Aniston
发布: 2025-02-19 11:33:10
原创
481 人浏览过

本教程向您展示了如何在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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板