unity中Json序列化处理

Resources

在Asset下创建Resources文件夹,注文件夹名称不能打错,如果不用此方法也可以用io流完成Json的读取

Load

Load(“path”)path表示Resources文件夹下路径,用于加载在Resources文件夹下物件和文字文件

UnloadUnusedAssets

用于卸载没有用的资源,减少内存压力,注像物件生成后如果马上进行UnloadUnusedAssets就会造成找不到物件贴图

LoadAll

用于加载文件夹内所有的物件

LoadAsync

LoadAsync(“path”)path表示Resources文件夹下路径用于异步加载资源

FindObjectsOfTypeAll

FindObjectsOfTypeAll(Type type); 返回一个对象的类型或从type派生的数组
查找该类型的所有对象,这个函数可以返回加载的Unity物体的任意类型,包含游戏对象、预制体、材质、网格、纹理等等。它也会列出内部的东西,因此,请格外小心处理返回的对象的方式。相反Object.FindObjectsOfType这个函数也会列出禁用的对象。

 private void Awake()
    {

        TextAsset WPText = Resources.Load("WeaponData") as TextAsset;
    }

Json

序列化处理

JsonUtility

unity自带的Json处理
进行整体进行存档和载入比较方便,但如果将文件具体数值进行处理就会复杂

FromJson

FromJson(string jsonString);
从Json表达式创建对象。jsonString为整段序列化Text, 用于创建一个组件内部工具,该方法使用Unity序列化;因此你创建的类型必须支持序列化。它必须是有序列化属性标记的类或结构。对象的域必须支持序列化。不支持的域和私有域或者非序列化属性标记的域一样,将会被忽略。 如果JSON表示法丢失任何部分,它们将会指定默认值(即T类型域会是默认值-它将不会指定任何值初始化,对象结构在反序列化期间不会执行)。

FromJsonOverwrite

FromJsonOverwrite(序列化Text, 某个组件);类似于Load用于载入,可以将json的快速载入,通过读取Json表示法重写对象数据。

ToJson

ToJson(object obj);将某对象转换成Json文字

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class JsonTest : MonoBehaviour{
    // Start is called before the first frame update
    void Start()
    {
        TextAsset Jsonstring = Resources.Load("Test") as TextAsset;
        PlayerInfo player = PlayerInfo.CreateFromJSON(Jsonstring.text);
        print(player.health);
    }
}
[Serializable]
public class PlayerInfo{
    public string playerName;
    public int lives;
    public float health;
    public static PlayerInfo CreateFromJSON(string jsonString){
        return JsonUtility.FromJson(jsonString);
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerState : MonoBehaviour
{
	public string playerName;
	public int lives; 
	public float health;

	void Start()
	{
		TextAsset Jsonstring = Resources.Load("Test") as TextAsset;
		Load(Jsonstring.text);
	}
	public void Load(string savedData)
	{
		 JsonUtility.FromJsonOverwrite(savedData, this);
	}
}

JsonObject

功能比较强大,便于细节修改

Absorb

Absorb(JSONObject obj),Text1.Absorb(Text2);将Text2加在Text1的后面

add

只能增加一个值

AddField

AddField加一个二元元素

f

浮点数

str与ToString()

str不带双引号,后者会携带双引号

    private void Awake()
    {
        TextAsset WPText = Resources.Load("WeaponData") as TextAsset;
        TextAsset TestText = Resources.Load("Test") as TextAsset;

        JSONObject Text1 = new JSONObject(WPText.text);
        JSONObject Text2 = new JSONObject(TestText.text);

        print(Text1["playerName"].ToString());

    }

你可能感兴趣的:(unity)