unity 存档

存档这个需求拆开来说无非是两部分,存什么和怎么存。

存什么

以我的项目为例,我需要保存游戏对象的种类和坐标作为存档,用户读取存档时,再重新构建场景。

首先,我们需要一个存档类

    public List<int> cubeListIndex = new List<int>();//方块的种类

    public List<Vector3> cubeList = new List<Vector3>();//方块的坐标

然后我们需要一个方法来存储数据,就不具体写了,这不是重点。

怎么存

unity中比较常见存储方法有四类:PlayerPrefs,c#序列化,XML序列化,Json。

四种方法各有优劣,我使用的是c#序列化。

首先是存储数据

        //创建文件并写入数据
        BinaryFormatter bf = new BinaryFormatter();
        FileStream file = File.Create(Application.persistentDataPath + "/Save1.save");
        bf.Serialize(file, sl);
        file.Close();

这里需要强调的一点是Application.persistentDataPath这个操作路径是PC端和移动端都可以使用的可读可写路径。

然后是读取数据

        if (File.Exists(Application.persistentDataPath + "/Save1.save"))
        {
            //重置场景

         
### 实现 Unity 游戏存档功能的方法 在 Unity 中实现游戏存档功能主要依赖于多种技术手段来保存玩家进度和其他重要信息。对于单机游戏来说,这通常涉及到角色信息、道具信息、场景信息以及事件信息等内容的持久化。 #### 使用 `PlayerPrefs` 进行简单数据存储 `PlayerPrefs` 是一种轻量级的数据存储解决方案,适用于保存少量的关键值对形式的小型数据集。这类数据会被写入系统的注册表中,在 Windows 上具体路径为计算机\HKEY_CURRENT_USER\Software\Unity\UnityEditor\[组织名]\[工程名][^4]。尽管这种方法易于实施,但它并不适合复杂的游戏状态管理,因为其容量有限且安全性较低。 #### 利用 JSON 或 XML 文件进行本地文件系统上的数据序列化 通过编写自定义逻辑可以将游戏内的各种变量转化为字符串表示并将其记录在一个外部文件中;当重新加载这些数据时再反向操作恢复原始的状态。此过程中经常采用 JavaScript Object Notation (JSON) 或 Extensible Markup Language (XML),这两种格式都具有良好的可读性和跨平台兼容性[^1]。 #### 借助 BinaryFormatter 类或其他二进制序列化工具 为了提高效率和减少磁盘占用空间,还可以考虑利用 .NET 提供的 `BinaryFormatter` 来完成更紧凑高效的二进制编码工作。不过需要注意的是,由于安全性的原因,在较新的版本中官方已经不推荐继续使用该类,并建议寻找替代方案如 MessagePack 或 Protocol Buffers 等第三方库来进行高性能的序列化处理[^2]。 #### 自动化序列化机制配合 ScriptableObject 和 Serializable 属性标记 Unity 内置了一套强大的自动化序列化框架用于支持 Inspector 编辑器视图中的属性显示与修改。开发者可以通过给 C# 脚本中的字段添加 `[System.Serializable]` 特性标签使其成为可被自动序列化的成员变量。此外,ScriptableObject 结构允许创建独立存在于项目之外的对象实例,非常适合用来封装复杂的配置选项或是长期存在的全局资源设置[^3]。 ```csharp using UnityEngine; [System.Serializable] public class PlayerData { public int health; public float positionX, positionY, positionZ; // 角色位置坐标 // 更多需要保存的角色相关信息... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值