Unity之数据持久化——PlayerPrefs

本文介绍了Unity中的数据持久化概念,重点讲解了PlayerPrefs的使用,包括存储、读取、删除数据的方法,以及PlayerPrefs数据在不同平台的存储位置。PlayerPrefs适用于存储简单数据,虽然存在局限性,但因其简单快捷而常用于存储对安全性要求不高的数据。

什么是数据持久化?

数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内从中的数据模型的统称

即:游戏数据存储到硬盘,硬盘中的数据读取到游戏中

游戏运行时—(变量数据)—内存<——>硬盘

PlayerPref是Unity提供的可以用于存储读取玩家数据的公共类

1、存储相关

PlayerPrefs的数据存储类似于键值对存储,一个键对应一个值,提供了存储3中数据的方法:int,float,string

键:string类型

值:int,float,string,对应3中API

PlayerPrefs.SetInt("myAge", 18);
PlayerPrefs.SetFloat("myHeight", 177.5f);
PlayerPrefs.SetString("myName", "hp”);

直接调用Set方法,只会把数据存到内存里,当游戏结束是,Unity会自动把数据存到硬盘中,如果游戏不是正常结束,而是崩溃,数据是不会存到硬盘中的

// 只要调用该方法,就会马上存储到硬盘中

PlayerPrefs.Save();

PlayerPrefs是由局限性的,它只能存3中类型的数据,如果想要存储别的类型的数据,只能降低精度,或者上升精度来进行存储

// 如果想存入bool类型的值

bool sex = true;
PlayerPrefs.SetInt("sex", sex ? 1: 0);

// 如果不同类型用同一键名进行存储,会进行覆盖

PlayerPrefs.SetFloat("myAge", 20.2f);

那么myAge的值从int类型的1

### 关于 Unity 游戏开发中持久化存储与数据管理的相关书籍 在 Unity 游戏开发领域,涉及持久化存储和数据管理的技术书籍相对较少,但可以通过一些综合性的游戏开发书籍以及特定的主题文章获取相关内容。以下是几本可能适合的书籍和技术资源: 1. **《Unity游戏开发实战》** 此书涵盖了多种实际案例,其中包括如何处理玩家进度保存、配置文件管理和跨场景数据传递等内容[^1]。虽然书中并未单独列出“持久化”章节,但在多个实例中提到了 JSON 序列化、PlayerPrefs 的使用以及其他本地存储方案。 2. **《Pro Unity Game Development with C# (Third Edition)》** 这本书深入探讨了 Unity 中的核心机制,并提供了许多关于数据持久化的解决方案。它讲解了如何利用 `BinaryFormatter` 或者现代替代品(如 JSON.NET)来进行复杂对象的序列化/反序列化操作。此外还讨论了 SQLite 集成以实现更强大的数据库支持[^2]。 3. **《Learning Unity 2D Game Development by Example》** 主要针对二维游戏制作过程中的常见需求展开叙述,其中也包含了简单的存档系统构建教程。作者介绍了几种不同的方式来完成这一目标——从最基础的 PlayerPrefs 到更加复杂的 XML 文件写入方法。 4. **在线资源补充说明** - 对于最新技术和最佳实践来说,除了上述提到的传统出版物外,还可以参考官方文档部分有关 Player Prefs, Scriptable Objects 等方面的描述。 - 社区贡献也是不可忽视的重要组成部分,在 GitHub 上有许多开源项目展示了不同层次上的数据管理系统;而在 Stack Overflow 和 Unity Forums,则经常能看到围绕具体问题解决办法而产生的热烈讨论。 下面给出一段简单示例代码展示如何基于 JSON 实现基本的对象持久化功能: ```csharp using System.IO; using UnityEngine; public class SaveSystem { public static void SaveData(MyGameData data){ string json = JsonUtility.ToJson(data); File.WriteAllText(Application.persistentDataPath + "/savefile.json",json); } public static MyGameData LoadData(){ string path = Application.persistentDataPath + "/savefile.json"; if(File.Exists(path)){ string json = File.ReadAllText(path); return JsonUtility.FromJson<MyGameData>(json); }else{ Debug.LogError("Save file not found!"); return null; } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值