Unity打包Android的apk文件时有关Json的注意事项

需要注意的事项如下:
一、Json的库文件LitJson.dll需要放在项目的Assets根文件夹中,一般是在Assets文件夹里面新建一个名为Plugins文件夹中,把Json的库文件放在这个文件夹中就可以。
二、接下来我们首先要把Json文件中的文本内容提取出来,也就是后缀以.json为结尾的Json文件,提取的方式暂时可以有以下两种通过代码的方式提取Json文件的文本内容:

//第一种方式
TextAsset filePath = Resources.Load<TextAsset>(Json文件名);
Debug.Log(filePath); 

//第二种方式
string filePathStr = Resources.Load<TextAsset>(Json文件名).text;
Debug.Log(filePathStr);

注:
1、代码中的“(Json文件名)“括号里面的"文件名"一定一定不要加上后缀名为.json或者是.txt,就是单纯的文件名,不要加Json文件名后缀就可以了!
2、如果Json文件是有层级结构的,那么我们在写Json文件名的时候顺便也要把Json前面的路径地址加上。

如果以上不清楚的话我就在这里打个比方,
第一种情况: 假如我们在Assets根文件夹里面有一个名为Resources文件夹,这个Resources文件夹中只有一个名为Demo.json的Json文件,那么我们现在的Json文件名为Demo就可以了。
第二种情况: 假如我们在Assets根文件夹里面有一个名为Resources文件夹,这个Resources文件夹中还有一个名为Catalog的文件夹,这个Catalog的文件夹中有一个名为Demo.json的Json文件,那么我们现在的Json文件名就要加上前面的文件夹路径了,也就是现在的Json文件名为Catalog/Demo就可以了。

三:通过以上的步骤就可以得到Json文件中的文本内容,那我们现在就可以开始下一个步骤:

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

public class Memento
{
    
    

 
    private string savePathInitPath;  //初始版的Json文件路径
    private string savePathCompletePath; //正在游戏版的文件路径
    private string initContent;  //初始版Json文件夹中的内容
    private string completeContent;  //正在游戏版的文件内容
    private string filePath;
    
   //初始化游戏的相关数据
    public void DataInit()
    {
    
    
        //通过Application.persistentDataPath可以持久在手机端读取、写入以及保存游戏的相关数据
         savePathInitPath = Application.persistentDataPath + "/playerManager.json"; 
         savePathCompletePath = Application.persistentDataPath + "/CompleteplayerManagerDataVersion.json"; 
         //读取Json文件夹中的文本内容 
         initContent = Resources.Load<TextAsset>("Json/CompleteplayerManagerDataVersion").text;
         completeContent = Resources.Load<TextAsset>("Json/playerManager").text;
         //防止重复赋空值
         if (filePath != null)
         {
    
    
            return;
         }
         filePath = "";
    }

    //读取游戏数据
    public PlayerManager LoadByJson()
    {
    
    
        //防止判空
        if (savePathInitPath == null || savePathCompletePath == null || initContent == null || completeContent == null)
        {
    
    
            DataInit();
        }
        PlayerManager playerManager = new PlayerManager();
        if (GameManager.Instance.initPlayerManager)
        {
    
    
            filePath = savePathInitPath;
            //如果手机端的文件夹中不存在该文件,就创建该文件 
            if (!File.Exists(filePath))
            {
    
    
                File.WriteAllText(filePath,initContent);
            }
        }
        else
        {
    
    
            filePath = savePathCompletePath;   
            if (!File.Exists(filePath))
            {
    
    
                File.WriteAllText(filePath, completeContent);
            }
        }
        if (File.Exists(filePath))
        {
    
    
            StreamReader sr = new StreamReader(filePath);
            string jsonStr = sr.ReadToEnd();
            sr.Close();
            playerManager = JsonMapper.ToObject<PlayerManager>(jsonStr);
            return playerManager;
        }
        else
        {
    
    
            Debug.Log("PlayerManager读取失败");
        }
        return null;
    }



    //存储游戏数据
    public void SaveByJson()
    {
    
    
        if (savePathInitPath == null || savePathCompletePath == null || initContent == null || completeContent == null)
        {
    
    
            DataInit();
        }
        PlayerManager playerManager = GameManager.Instance.playerManager;
        string saveJsonStr = JsonMapper.ToJson(playerManager);
        StreamWriter sw = new StreamWriter(filePath);
        sw.Write(saveJsonStr);
        sw.Close();
    }
}

代码中最最最值得需要注意的是: Application.persistentDataPath这个的相关使用方法,因为这个可以持久在手机端读取、写入以及保存游戏的相关数据。

猜你喜欢

转载自blog.csdn.net/jianjianshini/article/details/113063535