Unity游戏之存储数据
作者:! ? 发布时间:2022-06-06 20:58:28
在许多游戏中当我们因为一些问题无法接着进行游玩,我们都会选择保存,以便后面有空时,接着游玩。接下来,我们会学习一些Unity有关的存储方法。
一、Unity-PlayerPrefs(数据持久化)
这是Unity自带的用于本地持久化保存与读取的类,采用的是键值对的方式来进行存储,一般通过键名来进行获取。PlayerPrefs有Int,float,string类型。
保存数据
PlayerPrefs.SetString(“Color”, color);
PlayerPrefs.SetInt(“Number”, number);
PlayerPrefs.SetFloat(“Class”, class);
读取数据
color = PlayerPrefs.GetString(“Color”, “red”);
number = PlayerPrefs.GetInt(“Number”, 20);
class = PlayerPrefs.GetFloat(“Class”, 1);
其他一些方法
PlayerPrefs.HasKey();//是否包含该键值对
PlayerPrefs.DeleteAll();//删除所有键值对
PlayerPrefs.DeleteKey();//删除某一个键值对
二、Unity-Serialization(序列化)和Deserialization(反序列化)
在Unity中我们也可以通过使用序列化来实现存储,我们将要存储的对象用序列化转化为字节流来进行存储,当我们需要用时我们通过反序列化将字节流转化为对象来进行读取。
常见的序列化方法:二进制,XML,Json.
这三种方法各有千秋,以下是对这三种方法对比
二进制方法:简单,但可读性差
XML方法:可读性强,但是文件庞大,冗余信息多
JSON方法:数据格式比较简单,易于读写,但是不直观,可读性比XML差
接下来我会讲解一些关于二进制的方法,关于XML以及Json方法我会放在下次来讲。
三、二进制序列方法
二进制方法(Binary Formatter)
序列化:新建或打开一个二进制文件,通过二进制格式器将对象写入该二进制文件。
反序列化:打开待反序列化的二进制文件,通过二进制格式器将文件解析成对象。
在进行存储之前我们要定义一个类用来存储我们需要保存的东西,接下来我会使用SiKi学院的案例来进行讲解。(详情观看http://www.sikiedu.com/my/course/129)
定义一个Save类,不需要继承MonoBehaviour
该方法用于存储射击次数以及得分和所生成的Monster的所在位置以及其种类。
在进行游戏的存储时我们在GameManager中来实现二进制序列化方法。
因为我们通过将游戏物体转化为流来进行存储以及通过二进制序列化来进行存储,所以我们要引入两个命名空间。
因为我们保存当前的游戏对象所以我们定义一个方法来进行创建Save对象并存储当前游戏状态信息。
接下来使用二进制来进行对游戏的保存
if (File.Exists(Application.dataPath + “/StreamingFile” + “/byBin.txt”)){UIManager._instance.ShowMessage(“保存成功”);}是安全校验,当文件夹存在该路径会提示保存成功。
读取二进制
在我们读取保存游戏时我们要将存储的数据进行读取所以在LoadByBin()方法中实现。
来源:https://blog.csdn.net/weixin_51002263/article/details/115706639


猜你喜欢
- 我以2018版的intellij idea为例一.创建JavaWeb1.第一步点击左上角的File-->New-->Projec
- checkpoint 机制的具体实现我们都知道为了优化分布式存储系统中 NameNode 的重启性能,我们引进了 checkpoint 机制
- 阅读目录:基础Socket编程多线程并发阻塞式同步IO基础在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践。
- Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "hello";,另一种就是使用new
- Spring Boot 2.7.6整合redis与低版本的区别最近在写程序的时候参考了之前写过的一篇文章spring boot整合redis
- 前言 在android开发中,很多的app都有使用侧滑菜单,有的是自定义控件来实现侧滑菜单,但是android给我们提供了DrawerLa
- 首先去官网下载 一个压缩包 网址: 这里是 1.2.17的版本 下载之后解压就可以了下面就从eclipse中添加
- 首先是按行读取字符串import java.io.BufferedReader;import java.io.File;import jav
- 十进制转二进制正整数转二进制除2取余,逆序排列,高位补零。示例:十进制255 = 二进制1111 1111计算过程:255/2=127===
- SpringMVC RESTFul列表功能实现一、增加控制器方法在控制器类 EmployeeController 中,添加访问列表方法。@C
- 如何获取二维数组中的元素个数呢?int[,] array = new int[,] {{1,2,3},{4,5,6},{7,8,9}};//
- 前言上节在谈论Bean的实例化过程时,在说明实例化后阶段时只是粗略地看了一下populateBean,并未展开分析。本节接着populate
- 问题介绍测试服务器突然无法连接,ssh登录不上。只有重启才能解决。重启一天后,又连接不上了。于是有了下面的排查过程,最终发现是有个java程
- 若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,这种情况下的代理类通常都是我们在Java代码中定义的。 通常情况下, 静
- 本文实例讲述了Java正则验证电话,手机,邮箱,日期,金额的方法。分享给大家供大家参考,具体如下:package com.hooypay.t
- 1.简介if判断语句是很多编程语言的重要组成部分。但是,若我们最终编写了大量嵌套的if语句,这将使得我们的代码更加复杂和难以维护。让我们看看
- 本文实例讲述了C#的内存回收方法。分享给大家供大家参考。具体实现方法如下:如下示例代码是调用win32底层操作,可实现内存的回收。
- Springboot添加server.servlet.context-pathserver.servlet.context-path配置的作
- 常见尺寸单位Android开发中的常用尺寸单位有如下几种:dp (dip)pxptinchsp算不知道确切含义,相信对于以上这几种尺寸单位大
- ArrayList线程不安全怎么办?有三种解决方法:使用对应的 Vector 类,这个类中的所有方法都加上了 synchronized 关键