Unity(游戏)中五种数据存储的方法

Unity(游戏)中五种数据存储的方法

一、PlayerPrefs
unity3d提供了一个用于本地持久化保存与读取的类-------PlayerPrefs.工作原理很简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值(注:PlayerPrefs运用起来很方便,随时都可以存取与读取)。
Playerprefs类支持3中数据类型的保存和读取,分别是浮点型、整型和字符串型:
PlayerPrefs.SetInt();保存整型数据
PlayerPrefs.SetFloat();保存浮点型数据
PlayerPrefs.SetString();保存字符串型数据
PlayerPrefs.GetInt();读取整型数据
PlayerPrefs.GetFloat();读取浮点型数据
PlayerPrefs.GetString();读取字符串型数据
二、读取普通文本资源:TextAsset

TextAsset text=(TextAsset)Resources.Load("unity3d");
Debug.Log(text.text);

在Project窗口的根目录创建Resources文件夹,然后把名字为unity3d.txt的文件夹的文件放在Resources文件夹下就可以读取到。
三、Json
1.JSON 语法规则
(1)对象表示为键值对

      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”}]
4)Json在线校验网站
http://www.bejson.com/
2.需要使用第三方插件,下载网址在https://sourceforge.net/projects/litjson/,下载之后将LitJson文件拖到自己工程的文件夹中,放在Plugins下。
两种解析方式及常见一个及多个对象的Json

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 属性必须加引号
属性值必须被引号包围,不过单引号和双引号均可使用

<?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语句

	//创建表
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;
  • 30
    点赞
  • 180
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity游戏,可以使用JSON格式进行数据存储。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,通过简单的键值对来表示数据。可以使用LitJson.dll插件来实现在Unity读取和存储JSON数据。 以下是使用JSON进行数据存储的步骤: 1. 创建一个技能类(Skill),在该类封装需要存储的字段,比如Id和Name。 2. 创建Skill类型的List集合,并向其添加Skill对象。 3. 使用LitJson的JsonMapper.ToJson()方法将List集合转换为JSON格式的字符串。 4. 使用File.WriteAllText()方法将JSON字符串写入文件。 5. 为了防止文乱码,可以使用Regex.Replace()方法将转义字符转码为实际字符。 在Unity使用LitJson.dll插件来读取和存储JSON数据需要将LitJson.dll文件放入Unity的Plugins文件夹。编写相应的代码来实现读取和存储的功能。可以参考相关的教程或视频来学习更详细的使用方法。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Unity Json读取存储](https://download.csdn.net/download/qq_42126516/12251667)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Unity之JSON(数据存储)](https://blog.csdn.net/m0_74427422/article/details/129540637)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [学习记录:unity的json存储](https://blog.csdn.net/shijinlinaaa/article/details/125896790)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值