Unity(游戏)中五种数据存储的方法
Unity(游戏)中五种数据存储的方法
一、PlayerPrefs
unity3d提供了一个用于本地持久化保存与读取的类-------PlayerPrefs.工作原理很简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值(注:PlayerPrefs运用起来很方便,随时都可以存取与读取)。
Playerprefs类支持3中数据类型的保存和读取,分别是浮点型、整型和字符串型:
PlayerPrefs.SetInt();保存整型数据
PlayerPrefs.SetFloat();保存浮点型数据
PlayerPrefs.SetString();保存字符串型数据
PlayerPrefs.GetInt();读取整型数据
PlayerPrefs.GetFloat();读取浮点型数据
PlayerPrefs.GetString();读取字符串型数据
二、读取普通文本资源:TextAsset
1 2 | TextAsset text=(TextAsset)Resources.Load( "unity3d" ); Debug.Log(text.text); |
在Project窗口的根目录创建Resources文件夹,然后把名字为unity3d.txt的文件夹的文件放在Resources文件夹下就可以读取到。
三、Json
1.JSON 语法规则
(1)对象表示为键值对
1 2 3 | Dictionary<key,value> dic = new Dictionary<key,value>(); dic[0] = "Jack" ; string temp = dic[0]; |
形式:{"firstName": "Json"}
{"firstName": "Jack"}
键值对之间以冒号连接
(2)数据由逗号分隔
{“firstName”: “Jack”,“middleName”:“Nigulas”}
(3)花括号保存对象
(4)方括号保存数组
“People”:[{“name”:“小红”,“age”:“16”,“grade”:“2”},{“name”:“小明”,“age”:“18”,“grade”:“2”}]
(5)Json在线校验网站
http://www.bejson.com/
2.需要使用第三方插件,下载网址在https://sourceforge.net/projects/litjson/,下载之后将LitJson文件拖到自己工程的文件夹中,放在Plugins下。
两种解析方式及常见一个及多个对象的Json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; public class JsonTest : MonoBehaviour { private string jsonStr = "{'name':'孙悟空','age':50,'gender':'公','skill':'火眼金睛'}" ; // Use this for initialization void Start () { //ParJson(); //ParJson2(); //CreateJson(); CreateJson02(); } /// <summary> /// 第一种解析方式 /// </summary> private void ParJson() { string jsonStr = "[{'name':'孙悟空','age':50,'gender':'公','skill':'火眼金睛'}," + "{'name':'猪八戒','age':500,'gender':'公','skill':'九齿钉耙'}," + "{'name':'唐僧','age':23,'gender':'男','skill':'紧箍咒'}," + "{'name':'沙和尚','age':500,'gender':'公','skill':'禅杖'}]" ; TravelWestPerson[] quJingRens = JsonMapper.ToObject<TravelWestPerson[]>(jsonStr); if (quJingRens != null ) { for ( int i = 0;i<quJingRens.Length;i++) { Debug.Log(quJingRens[i].name+ " " +quJingRens[i].age+ " " +quJingRens[i].gender+ " " +quJingRens[i].skill); } } } /// <summary> /// 第二种解析方式 /// </summary> private void ParJson2() { string jsonStr = "[{'name':'孙悟空','age':50,'gender':'公','skill':'火眼金睛'}," + "{'name':'猪八戒','age':500,'gender':'公','skill':'九齿钉耙'}," + "{'name':'唐僧','age':23,'gender':'男','skill':'紧箍咒'}," + "{'name':'沙和尚','age':500,'gender':'公','skill':'禅杖'}]" ; JsonData datas = JsonMapper.ToObject(jsonStr); for ( int i=0;i<datas.Count;i++) { JsonData data = datas[i]; //通过键值对的形式 获取 value值 Debug.Log(data[ "name" ]+ " " +data[ "age" ]+ " " +data[ "gender" ]+ " " +data[ "skill" ]); } } /// <summary> /// 创建一个对象的Json /// </summary> private void CreateJson() { //new 对象 TravelWestPerson baiLongMa = new TravelWestPerson( "小白龙" ,500, "男" , "呼风唤雨" ); //对象转字符串 string jsonStr = JsonMapper.ToJson(baiLongMa); Debug.Log(jsonStr); } /// <summary> /// 创建多个对象的Json /// </summary> private void CreateJson02() { string [] names = new string [] { "小白龙" , "大白兔" , "老龙王" }; int [] ages = new int [] {500,3,5000}; string [] genders= new string [] { "男" , "女" , "男" }; string [] skills = new string [] { "鹰愁涧" , "吃萝卜" , "呼风唤雨" }; //集合的 JsonData data = new JsonData(); //设置为数组类型 data.SetJsonType(JsonType.Array); for ( int i=0;i<names.Length;i++) { //集合中的一个对象 JsonData personData = new JsonData(); //对这个对象进行赋值 personData[ "name" ] = names[i]; personData[ "age" ] = ages[i]; personData[ "gender" ] = genders[i]; personData[ "skill" ] = skills[i]; data.Add(personData); } string strJson = data.ToJson(); Debug.Log(strJson); } // Update is called once per frame void Update () { } } internal class TravelWestPerson { public string name; public int age; public string gender; public string skill; public TravelWestPerson( string name, int age, string gender, string skill) { this .name = name; this .age = age; this .gender = gender; this .skill = skill; } public TravelWestPerson() { } } |
四、XML存储
1)XML 被设计用来传输和存储数据。
2)XML 标签没有被预定义。您需要自行定义标签。
3)XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。
4)元素:
属性:
Anna
Smith
标签:元素 + 属性
5)声明
<?xml version="1.0" encoding="utf-8"?>
6)xml的书写开闭必须统一,又开有闭
所有 XML 元素都须有关闭标签
7)XML 标签对大小写敏感
下面两个标签不一样
<Message>这是1</Message>
<message>这是2</message>
这是错误的
<Message>这是1</message>
8)XML 必须正确地嵌套
9)XML 的属性值须加引号
10)XML 命名规则
XML 元素必须遵循以下命名规则:
名称可以含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字符 “xml”(或者 XML、Xml)开始
名称不能包含空格
可使用任何名称,没有保留的字词。
11)XML 属性必须加引号
属性值必须被引号包围,不过单引号和双引号均可使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?xml version= "1.0" encoding= "utf-8" ?> <root> <persons> <person id = "1" > <name>唐伯虎</name> <age>23</age> <skill>撩妹</skill> </person> <person id = "2" > <name>祝枝山</name> <age>26</age> <skill>神鸟凤凰图</skill> </person> <person id = "3" > <name>文征明</name> <age>25</age> <skill>四绝的全才</skill> </person> <person id = "4" > <name>徐祯卿</name> <age>25</age> <skill>号称文雄</skill> </person> </persons> </root> |
五、Sqlite牵涉到的Sqlite语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | //创建表 create table UESR(uid integer,name text,score text); ----------------------------------------------------------------------------------------- //列出表名 .table (不加;分号的) ----------------------------------------------------------------------------------------- //插入信息 增加信息 insert into USER(name,score) values( 'lisi' , '89' ); //插入信息 insert into USER values(1, 'zhangsan' ,89); ------------------------------------------------------------------------------------- //以属性删除 删除一行的数据 delete from USER where score = 4; --------------------------------------------------------------------------------------- //修改 update USER set score =75 where name= 'lisi' ; --------------------------------------------------------------------------------------- //展示表中的所有信息 select * from USER; //主键自增 create table if not exists USER(uid integer primary key autoincrement,name text,score text); //返回有几行 select count(*) from USER; //返回总和 select sum(score) from USER; select * from USER where score >69 and score<95; select * from USER limit 2; //前两条 select * from USER order by score; //正序排 select * from USER order by score desc; //倒序排 select * from USER order by score desc limit 1; //倒数第一个 //删除表格 drop table USER; |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库