下面介绍几种 Unity本地记录存储的实现方式。

第一种 Unity自身提供的 PlayerPrefs

//保存数据


  1. PlayerPrefs.SetString("Name",mName);
  2. PlayerPrefs.SetInt("Age",mAge);
  3. PlayerPrefs.SetFloat("Grade",mGrade)

//读取数据


  1. mName=PlayerPrefs.GetString("Name","DefaultValue");
  2. mAge=PlayerPrefs.GetInt("Age",0);
  3. mGrade=PlayerPrefs.GetFloat("Grade",0F);

//清除所有记录

 PlayerPrefs.DeleteAll();

//删除其中某一条记录

PlayerPrefs.DeleteKey("Age");

//将记录写入磁盘

PlayerPrefs.Save()

第二种 BinaryFormatter 二进制序列化

假设有一个Player类


  1. [System. Serializable]
  2. public class Player
  3. {
  4. public int health;
  5. public int power;
  6. public Vector3 position;
  7. }

由于BinaryFormatter序列化不支持Unity的Vector3类型,所以我们需要做一下包装。


  1. public class PlayerData{
  2. public int level;
  3. public int health;
  4. public float[] position;
  5. public PlayerData(Player player)
  6. {
  7. this.level = player.level;
  8. this.health = player.health;
  9. this.position = new float[3];
  10. this.position[0] = player.transform.position.x;
  11. this.position[1] = player.transform.position.y;
  12. this.position[2] = player.transform.position.z;
  13. }
  14. }

我们对PlayerData进行保存和读取。读取出来的PlayerData可以赋给Player。


  1. public static class SaveSystem{
  2. //保存数据
  3. public static void SavePlayer(Player player)
  4. {
  5. BinaryFormatter formatter = new BinaryFormatter();
  6. string path = Application.persistentDataPath+"/player.fun";
  7. FileStream stream = new FileStream(path,FileMode.Create);
  8. PlayerData data = new PlayerData(player);
  9. formatter.Serialize(stream,data);
  10. stream.Close();
  11. }
  12. //读取数据
  13. public static PlayerData LoadPlayer()
  14. {
  15. string path = Application.persistentDataPath+"/player.fun";
  16. if(File.Exists(path))
  17. {
  18. BinaryFormatter formatter = new BinaryFormatter();
  19. FileStream stream = new FileStream(path,FileMode.Open);
  20. PlayerData data = formatter.Deserialize(stream) as PlayerData;
  21. stream.Close();
  22. return data;
  23. }else{
  24. Debug.LogError("Save file not found in "+path);
  25. return null;
  26. }
  27. }
  28. }

第三种 保存为json格式的文本文件

使用 Unity 自身API JsonUtility。

保存数据


  1. public static void SavePlayerJson(Player player)
  2. {
  3. string path = Application.persistentDataPath+"/player.json";
  4. var content = JsonUtility.ToJson(player,true);
  5. File.WriteAllText(path,content);
  6. }

读取数据


  1. public static PlayerData LoadPlayerJson()
  2. {
  3. string path = Application.persistentDataPath+"/player.json";
  4. if(File.Exists(path)){
  5. var content = File.ReadAllText(path);
  6. var playerData = JsonUtility.FromJson<PlayerData>(content);
  7. return playerData;
  8. }else{
  9. Debug.LogError("Save file not found in "+path);
  10. return null;
  11. }
  12. }

第四种 XmlSerializer进行串行化

假如有类


  1. public class Entity
  2. {
  3. public Entity()
  4. {
  5. }
  6. public Entity(string c, string f)
  7. {
  8. name = c;
  9. school = f;
  10. }
  11. public string name;
  12. public string school;
  13. }

读取数据


  1. List<Entity> entityList=null;
  2. XmlSerializer xs = new XmlSerializer(typeof(List<Entity>));
  3. using (StreamReader sr = new StreamReader(configPath))
  4. {
  5. entityList = xs.Deserialize(sr) as List<Entity>;
  6. }

保存数据


  1. List<Entity> entityList=null;
  2. XmlSerializer xs = new XmlSerializer(typeof(List<Entity>));
  3. using (StreamWriter sw = File.CreateText(configPath))
  4. {
  5. xs.Serialize(sw, entityList);
  6. }

对应的xml文件为:


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ArrayOfEntity xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  3. <Entity>
  4. <Name>Alice</Name>
  5. <School>SJTU</School>
  6. </Entity>
  7. <Entity>
  8. <Name>Cici</Name>
  9. <School>CSU</School>
  10. </Entity>
  11. <Entity>
  12. <Name>Zero</Name>
  13. <School>HIT</School>
  14. </Entity>
  15. </ArrayOfEntity>

Unity3D 本地数据持久化几种方式的更多相关文章

  1. ios网络学习------4 UIWebView的加载本地数据的三种方式

    ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...

  2. iOS --- UIWebView的加载本地数据的三种方式

    UIWebView是IOS内置的浏览器,可以浏览网页,打开文档  html/htm  pdf   docx  txt等格式的文件.  safari浏览器就是通过UIWebView做的. 服务器将MIM ...

  3. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  4. python爬虫---爬虫的数据解析的流程和解析数据的几种方式

    python爬虫---爬虫的数据解析的流程和解析数据的几种方式 一丶爬虫数据解析 概念:将一整张页面中的局部数据进行提取/解析 作用:用来实现聚焦爬虫的吧 实现方式: 正则 (针对字符串) bs4 x ...

  5. Solr 删除数据的几种方式

    原文出处:http://blog.chenlb.com/2010/03/solr-delete-data.html 有时候需要删除 Solr 中的数据(特别是不重做索引的系统中,在重做索引期间).删除 ...

  6. SparkStreaming获取kafka数据的两种方式:Receiver与Direct

    简介: Spark-Streaming获取kafka数据的两种方式-Receiver与Direct的方式,可以简单理解成: Receiver方式是通过zookeeper来连接kafka队列, Dire ...

  7. SparkStreaming与Kafka,SparkStreaming接收Kafka数据的两种方式

    SparkStreaming接收Kafka数据的两种方式 SparkStreaming接收数据原理 一.SparkStreaming + Kafka Receiver模式 二.SparkStreami ...

  8. 【代码笔记】iOS-向服务器传JSON数据的两种方式

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

  9. .NET MVC控制器向视图传递数据的四种方式

    .NET MVC控制器向视图传递数据的四种方式: 1.ViewBag  ViewBag.Mvc="mvc"; 2.ViewData ViewBag["Mvc"] ...

随机推荐

  1. [刷题] 237 Delete Nodes in a Linked List

    要求 给定链表中的一个节点,删除该节点 思路 通过改变节点的值实现  实现 1 struct ListNode { 2 int val; 3 ListNode *next; 4 ListNode(in ...

  2. Deepin深度应用商店和系统更新不正常的解决方法

    Deepin深度应用商店和系统更新不正常的解决方法 2020-02-04 10:25:09作者:i8520稿源:深度站 如果你的Deepin深度应用商店和系统更新不正常,可采用以下方法来解决问题. 解 ...

  3. 如何在 CentOS 8 中安装 Cockpit Web 控制台

    如何在 CentOS 8 中安装 Cockpit Web 控制台 [日期:2019-10-31] 来源:Linux公社  作者:醉落红尘 [字体:大 中 小]   在本文中,我们将帮助您在CentOS ...

  4. SSH实现免密登陆

    SSH实现免密登陆配置 ssh实现免密码登录的配置过程,主要分为以下几个步骤: serverA生成密钥,包括私钥和公钥 serverA将公钥传到serverB上 serverA上配置serverB登陆 ...

  5. 自动做bond的脚本

    #!/bin/bash # 先备份原来的网卡配置文件 find /etc/sysconfig/network-scripts/ -type f -name "ifcfg*"|xar ...

  6. mysql基础之视图、事务、索引、外键

    一.视图 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且在引用 ...

  7. 【转】Jquery 使用Ajax获取后台返回的Json数据后,页面处理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. SpringCloud专题之开篇及Eureka

    声明: 本专题部分理论来自翟永超老师的<Spring Cloud微服务实战>.建议大家看原书. 开篇 微服务简单来说是系统架构上的一种设计风格,他的主旨是将一个原本独立且庞大的系统按照不同 ...

  9. [Django高级之forms组件]

    [Django高级之forms组件] forms组件之校验字段 # 第一步:定义一个类,继承forms.Form # 第二步:在类中写字段,要校验的字段,字段属性就是校验规则 # 第三步:实例化得到一 ...

  10. python实现布隆过滤器及原理解析

    python实现布隆过滤器及原理解析     布隆过滤器( BloomFilter )是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地 ...