一)
PlayerPrefab
使用的是Unity自带的PlayerPrefab这个类 但是这个类只能保存 Int float string 三种类型
注:其本质为在本地文件写入一个XML文件
PlayerPrefs数据存储在哪里?
1.在Mac OS X上存储在~/Library/PlayerPrefs文件夹,名为unity.[company name].[product name].plist,这里company和product名是在project Setting中设置的
2.在windows下,playerPrefs被存储在注册的HKCU\Software[company name][product name]键下,这里company和product名是在project setting中设置的。
3.在Android上,数据存储(持久化)在设备上。数据保存在SharedPreferences中。

PlayerPrefs有哪些方法?
分为五类:SetXXX , GetXXX , DeleteXXX, HasKey , Save.
1.SetXXX : 是你要储存的数据类型,这里必须是一组键值对,第一个参数是Key,第二个参数是对应的Value。
2.GetXXX:这里是获取数据的函数,只有一个参数Key,用来获取对应Key的Value.
3.HasKey: 这个可以用来做判断。比如有两组数据一组有XX这个Key,另一组没有XX这个Key,这个时候我们就可以对这两组数据进行差异化操作。
4.DeleteXX:用于删除数据。
5.Save:用于在突发退出程序时,保存数据以备恢复时使用,但是会导致程序间断所以不建议调用。
官方地址:https://docs.unity3d.com/ScriptReference/PlayerPrefs.html
二)XML实现
用.net 控制台实现的(Unity和这一样)
命名空间

using System.Xml;
using System.IO;

1)创建XML
XML的学习:https://www.runoob.com/xml/xml-tutorial.html
.net/C#文档:https://docs.microsoft.com/zh-cn/dotnet/api/system.xml?view=netcore-3.1

public static void createXML()
{
//新建XmlDocument对象
XmlDocument doc = new XmlDocument();
//根节点
XmlElement root = doc.CreateElement(“player”);
//playerID节点
XmlElement playerID = doc.CreateElement(“player01”);
//name
XmlElement name = doc.CreateElement(“name”);
name.InnerText = “TOM”;
//age
XmlElement age = doc.CreateElement(“age”);
age.InnerText = “12”;
//strenth
XmlElement strenth = doc.CreateElement(“strenth”);
strenth.InnerText = “100”;
//speed
XmlElement speed = doc.CreateElement(“speed”);
speed.InnerText = “10”;
playerID.AppendChild(name);
playerID.AppendChild(age);
playerID.AppendChild(strenth);
playerID.AppendChild(speed);
root.AppendChild(playerID);
doc.AppendChild(root);
doc.Save(@“C:/Users/Administrator/Desktop/student.xml”);
//Console.WriteLine(“success”);
}
实现结果如下

2)添加XML
public static void AddXML()
{
//新建XmlDocument对象
XmlDocument doc = new XmlDocument();
//载入文件
try
{
doc.Load(@“C:/Users/Administrator/Desktop/student.xml”);
}
catch (System.Xml.XmlException)
{
throw new Exception(“load fail”);
}
//查找要插入数据的节点
XmlNode newxmlnode = doc.SelectSingleNode(“player”);
//创建新的节点
XmlElement newplayerID = doc.CreateElement(“player02”);
XmlElement name = doc.CreateElement(“name”);
name.InnerText = “jerry”;
//age
XmlElement age = doc.CreateElement(“age”);
age.InnerText = “14”;
//strenth
XmlElement strenth = doc.CreateElement(“strenth”);
strenth.InnerText = “105”;
//speed
XmlElement speed = doc.CreateElement(“speed”);
speed.InnerText = “15”;
newplayerID.AppendChild(name);
newplayerID.AppendChild(age);
newplayerID.AppendChild(strenth);
newplayerID.AppendChild(speed);
newxmlnode.AppendChild(newplayerID);
doc.Save(@“C:/Users/Administrator/Desktop/student.xml”);
Console.WriteLine(“add success”);
}
结果如下:

3)数据的更新
比如把player02节点下的speed更改为10
public static void UpdateXML()
{
XmlDocument doc = new XmlDocument();
//载入文件
try
{
doc.Load(@“C:/Users/Administrator/Desktop/student.xml”);
}
catch (System.Xml.XmlException)
{
throw new Exception(“load fail”);
}
XmlNode player = doc.SelectSingleNode(“player”);
XmlNodeList charactors = player.ChildNodes;
foreach (XmlElement charactor in charactors)
{
if (charactor.Name.Equals(“player02”))
{
XmlNode son = charactor.SelectSingleNode(“speed”);
son.InnerText = “10”;
Console.WriteLine(“update success”);
}
}
//写入文档
doc.Save(@“C:/Users/Administrator/Desktop/student.xml”);
}
结果如下

4)数据的读取
static void ReadXML()
{
XmlDocument doc = new XmlDocument();
string xmlfile = @“C:/Users/Administrator/Desktop/student.xml”;
doc.Load(xmlfile);
//获取根节点XmlElement表示节点(元素)
XmlNode player = doc.SelectSingleNode(“player”);
XmlNodeList personsEle = player.ChildNodes;

     foreach (XmlElement personEle in personsEle){XmlElement name = personEle.ChildNodes[0]as XmlElement;XmlElement age = personEle.ChildNodes[1] as XmlElement;XmlElement strenth = personEle.ChildNodes[2] as XmlElement;XmlElement speed = personEle.ChildNodes[2] as XmlElement;Console.WriteLine(name.InnerText + age.InnerText + strenth.InnerText+speed.InnerText);}}


5)节点的删除
static void DeleteXML()
{
XmlDocument doc = new XmlDocument();
doc.Load(@“C:/Users/Administrator/Desktop/student.xml”);

     XmlNode player = doc.SelectSingleNode("player");XmlNodeList personsEle = player.ChildNodes;foreach (XmlElement personEle in personsEle){if (personEle.Name.Equals("player01")){player.RemoveChild(personEle);//Console.WriteLine("delete success");}}doc.Save(@"C:/Users/Administrator/Desktop/student.xml");}

补:多层级XML中的元素查找
原XML文件:

比如将player下的equipment的子类的SWORD改变。
方法一:白痴方法:

static void searchAndChange(){XmlDocument doc = new XmlDocument();//载入文件try{doc.Load(@"C:/Users/Administrator/Desktop/check.xml");}catch (System.Xml.XmlException){throw new Exception("load fail");}XmlNode player = doc.SelectSingleNode("player");XmlNodeList playerID = player.ChildNodes;foreach (XmlElement playerson in playerID){if (playerson.Name.Equals("player02")){XmlNodeList grandsons = playerson.ChildNodes;foreach (XmlElement grandson in grandsons){if (grandson.Name.Equals("equipment")){XmlNode finalselect = grandson.SelectSingleNode("sword");finalselect.InnerText = "japansword";Console.WriteLine("success in searchAndChange");}}}}doc.Save(@"C:/Users/Administrator/Desktop/check.xml");}

结果如下:

方法二:递归方法:
不会
方法三:C#的LINQ
方法四:XML的函数
例:
static void recursionSearch()
{
XmlDocument doc = new XmlDocument();
//载入文件
try
{
doc.Load(@“C:/Users/Administrator/Desktop/check.xml”);
}
catch (System.Xml.XmlException)
{
throw new Exception(“load fail”);
}
XmlNode player = doc.SelectSingleNode(“player”);
XmlNodeList playerID = player.ChildNodes;
foreach (XmlElement playerson in playerID)
{
if (playerson.Name.Equals(“player02”))
{
XmlNode son = playerson.LastChild.SelectSingleNode(“sword”);
son.InnerText = “Englishsword”;
}
}
doc.Save(@“C:/Users/Administrator/Desktop/check.xml”);
}

三)JSON的数据保存
4)Unityd的ScriptableObject(實質為保存一個二級制文件)

可以看一下B站UP主他的視頻。

https://www.bilibili.com/video/BV1CJ41157DR

Unity的数据本地储存的集中方法相关推荐

  1. 数据本地存储方法封装(笔记)localStorage、sessionStorage

    数据本地存储方法封装(笔记)localStorage.sessionStorage 方法: import storage from 'good-storage'const SELLER_KEY = ' ...

  2. [Redux/Mobx] redux的数据存储和本地储存有什么区别?

    [Redux/Mobx] redux的数据存储和本地储存有什么区别? Redux存储的数据本质上都是JS变量,都是在内存中的,页面刷新就会消失 本质存储是像localStorage Cookie In ...

  3. 微信小程序表单提交php存储,微信小程序实现form表单本地储存数据

    本文实例为大家分享了微信小程序实现form表单本地储存数据的具体代码,供大家参考,具体内容如下 效果图: 主要利用小程序的getStorage来实现异步本地储存. 小程序目录结构如下: 新建项目前,为 ...

  4. 关于Unity中的本地存储

    本地存储 在做游戏的时候,经常需要在本机存储一些数据,比如闯关类游戏要记录闯到第几关,做单机的时候要把数据保存到本地,下次启动的时候数据存在,就是把数据保存到磁盘里面或者手机的flash闪存里面. U ...

  5. js监听地址栏变化_vue中本地储存也可以实时监听

    网上看到的这个方法 在项目里使用了 贼爽啊,分享下 顺便说一下 localStorage也实用 比如 在同一个页面里边 不同位置 两个变量的呈现都是使用的本地储存且一个变量修改,第二个变量也要实时变化 ...

  6. react本地储存_如何使用React和本地存储构建freeCodeCamp的配方框

    react本地储存 by Edward Njoroge 爱德华·尼约格(Edward Njoroge) 如何使用React和本地存储构建freeCodeCamp的配方框 (How to build f ...

  7. javascript中本地储存、离线缓存、地理定位、网络状态

    本地储存: 实际开发中某些内容是不需要放到服务器中,而是放到了浏览器中,需要的时候可以快速的访问,甚至页面刷新也可能不会丢失数据,容量较大:这里介绍两种数据存储方式:sessionStorage约5M ...

  8. react本地储存_如何在React项目中利用本地存储

    react本地储存 以及为什么要这么做. 本地存储是现代Web浏览器固有的Web API. 它允许网站/应用程序在浏览器中存储数据(简单和有限),从而使数据在以后的浏览器会话中可用. 在开始学习本教程 ...

  9. Unity3D研究院之Unity中连接本地或局域网MySQL数据库

    用户名 Email 游戏蛮牛 手机端 开启辅助访问 腾讯QQ 立即注册 登录 用户名 自动登录  找回密码 密码 登录  注册帐号 [Unity5.X版本开始预售啦!] 扫一扫,访问微社区 </ ...

最新文章

  1. c语言周传生教材答案,C语言程序设计与实践(普通高等教育“十二五”规划教材)...
  2. 处理通知栏点击操作_解读 | 企业主动披露申请 e操作来啦
  3. 解决sublime text无法安装插件问题
  4. C语言——反弹球游戏(第三阶段
  5. Oracle 11g R2手动配置EM(转)
  6. 压缩包安装mySQL 与 Qt中使用mySQL
  7. 服务器第二代型号,SK Hynix公开第二代服务器用SSD
  8. 计算机课堂听课情况记录表模板,【教师听课记录表】_教师听课评课记录表模板Word版...
  9. 从源码分析非线程安全集合类的不安全迭代器
  10. 算法解读:基本的算法
  11. 如何理解封装,继承,多态?
  12. 【自然语言处理】【实体匹配】PromptEM:用于低资源广义实体匹配的Prompt-tuning
  13. 开源项目推荐系列(短信网关)
  14. pacs系统服务器配置,PACS系统部及配置说明.doc
  15. 互动媒体技术——《代码本色》习作二:向量
  16. 题解-hzy loves segment tree I
  17. python中如何导入torch_[PyTorch入门]之数据导入与处理
  18. Java 集合框架(5)---- Map 相关类解析(中)
  19. 牛客网-精华专题-前端校招面试题目合集
  20. dnn降噪_芯片量产已超百万,「探境科技」发布AI双麦降噪语音识别方案

热门文章

  1. java web QQ(二)
  2. 第二证券|沪指缩量跌0.25%,地产、医药板块强势,钠电池概念表现亮眼
  3. 运维监控工具之商用软件篇
  4. 【深入理解计算机系统 01】计算机系统漫游
  5. 备份恢复 --已整理
  6. MSVS2008和VS2010的痛苦加装
  7. Fiddler修改请求、响应数据
  8. 值得收藏的6个OCR文字识别软件,帮你提升10倍工作效率
  9. 从零开始perp交叉编译及配置
  10. PCIE-PCB设计规范!(建议收藏)