Unity中通过LitJson插件对Json进行读档和存档案例简化版

写在开头

在Unity中,利用JSON进行存档和读档时,是否需要首先在Assets导入LitJson.dll文件,并不直接取决于Unity的某个特定版本。这个需求更多地与项目对JSON处理库的选择和依赖有关。
LitJson是一个流行的Unity插件,它可以方便、快速地进行JSON和对象之间的转换,适用于Unity的多个版本。然而,Unity自身并不直接提供LitJson作为其内置的一部分,因此,如果你的项目需要使用LitJson来进行JSON的序列化与反序列化,你需要手动将这个插件导入到你的Unity项目中。
关于Unity版本与LitJson的兼容性,通常情况下,较新版本的Unity能够很好地支持LitJson,因为LitJson作为一个成熟的插件,其开发者会不断更新以兼容新的Unity版本。然而,具体的兼容性情况可能会因Unity版本更新和LitJson插件版本的不同而有所变化。
在Unity中导入LitJson.dll脚本的步骤如下:
1、下载LitJson的最新版本DLL文件。可以从官方网站、GitHub或其他可靠的资源下载。
2、在Unity编辑器中,将下载的LitJson.dll文件放置到项目的Assets/Plugins目录下。如果Plugins目录不存在,你需要手动创建它。
3、在Unity的脚本中,使用using LitJson;来引入LitJson命名空间,然后就可以使用LitJson提供的JSONMapper类或其他相关类来进行JSON的序列化与反序列化了。
需要注意的是,虽然LitJson是一个流行的选择,但Unity社区也提供了其他多种JSON处理库,如内置的JsonUtility(Unity 5之后也就是2018.1版本之后提供)、Newtonsoft.Json(即Json.NET,一个功能强大的JSON处理库)等。你可以根据项目需求和个人喜好来选择合适的库。
综上所述,利用JSON做存档和读档之前导入LitJson.dll文件的需求,并不直接对应Unity的某个特定版本,而是取决于项目对JSON处理库的选择和依赖。

一、数据实体类。用于记录游戏物体的坐标、旋转值等等。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeItem {

    private string posX;
    private string posY;
    private string posZ;

    public string PosX
    {
        get { return posX; }
        set { posX = value; }
    }

    public string PosY
    {
        get { return posY; }
        set { posY = value; }
    }

    public string PosZ
    {
        get { return posZ; }
        set { posZ = value; }
    }

    public CubeItem() { }
    public CubeItem(string x, string y, string z)
    {
        this.posX = x;
        this.posY = y;
        this.posZ = z;
    }

    public override string ToString()
    {
        return string.Format("X:{0} Y:{1} Z:{2}", this.posX, this.posY, this.posZ);
    }
}

二、下面的这个脚本是挂载到场景中的摄像机或者是灯光上面。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
using System;
using System.IO;

public class CubeManager : MonoBehaviour {

    private Transform m_Transform;
    private Transform[] allCubeTransform;   //所有的Cube的Transform组件.
    private List<CubeItem> cubeList;        //Cube模型的集合.
    private List<CubeItem> posList;         //从Json文本中获取到的.

    private string jsonPath = null;         //json文本文件的路径地址.
    private GameObject prefab_Cube; 		//要进行实例化的Cube

	void Start () {
        m_Transform = gameObject.GetComponent<Transform>();
        cubeList = new List<CubeItem>();
        posList = new List<CubeItem>();

        jsonPath = Application.dataPath + @"\Resources\json.txt";
        prefab_Cube = Resources.Load<GameObject>("Cube");
	}


    void Update()
    {
        //按键盘上的A实现存档
        if(Input.GetKeyDown(KeyCode.A))
        {
            ObjectToJson();
        }

        //按键盘上的B键实现读档
        if(Input.GetKeyDown(KeyCode.B))
        {
            JsonToObject();
        }

    }

    /// <summary>
    /// 对象转换为Json数据.
    /// </summary>
    private void ObjectToJson()
    {
        cubeList.Clear();
        allCubeTransform = m_Transform.GetComponentsInChildren<Transform>();
        for (int i = 1; i < allCubeTransform.Length; i++)
        {
            Vector3 pos = allCubeTransform[i].position;
            CubeItem item = new CubeItem(Math.Round(pos.x, 2).ToString(), Math.Round(pos.y, 2).ToString(), Math.Round(pos.z, 2).ToString());
            cubeList.Add(item);
        }

        string str = JsonMapper.ToJson(cubeList);
        Debug.Log(str);

        File.Delete(jsonPath);
        StreamWriter sw = new StreamWriter(jsonPath);
        sw.Write(str);
        sw.Close();
    }


    /// <summary>
    /// JSON转换为多个对象.
    /// </summary>
    private void JsonToObject()
    {
        TextAsset textAsset = Resources.Load<TextAsset>("json");
        Debug.Log(textAsset.text);

        JsonData jsonData = JsonMapper.ToObject(textAsset.text);
        for (int i = 0; i < jsonData.Count; i++)
        {
            CubeItem item = JsonMapper.ToObject<CubeItem>(jsonData[i].ToJson());
            posList.Add(item);
        }

        for (int i = 0; i < posList.Count; i++)
        {
            Vector3 pos = new Vector3(float.Parse(posList[i].PosX), float.Parse(posList[i].PosY), float.Parse(posList[i].PosZ));
            GameObject.Instantiate<GameObject>(prefab_Cube, pos, Quaternion.identity, m_Transform);
        }

    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Defining the Future

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值