Unity的读表,存档,读档

读表是做游戏很重要的一个环节,这里我用到的是Newtonsoft。

首先选择表格转换后的json,这里我用的是Exele2Json工具

这是转换后的json

[
  {
    "id": 10000,
    "name": "勇者",
    "description": "憧憬着冒险的少年,拥有无限的潜力",
    "job": 0,
    "ai": 1,
    "hp": "500",//测试是否会自动转换为int
    "act": 25,
    "treatment": 5,
    "def": 0.05,
    "spd": 2.5,
    "crit": 0,
    "miss": 0.05,
    "skill1": 30000,
    "skill2": 0,
    "skill3": 30127,
    "hp_up": 0,
    "act_up": 0,
    "def_up": 0,
    "spd_up": 0,
    "crit_up": 0,
    "hp_1": 2,
    "atk": 2,
    "def_1": 2,
    "spd_1": 2
  },
  {
    "id": 10001,
    "name": "战士",
    "description": "提升了近战的能力,一切近战职业的基础",
    "job": 1,
    "ai": 1,
    "hp": 1000,
    "act": 35,
    "treatment": 5,
    "def": 0.3,
    "spd": 2.5,
    "crit": 0.05,
    "miss": 0.05,
    "skill1": 30001,
    "skill2": 0,
    "skill3": 30128,
    "hp_up": 0,
    "act_up": 0,
    "def_up": 0,
    "spd_up": 0,
    "crit_up": 0,
    "hp_1": 3,
    "atk": 2,
    "def_1": 2,
    "spd_1": 2
  }
]

然后创建用于接收json的类

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

public enum CharacterJob
{
    None = 0,
    Warrior = 1,    // 战士大类

    Hunter = 2,     // 猎人大类

    Magician = 3,     // 法师

    Priest = 4,     // 牧师
    Robber = 5,     // 盗贼
}

[System.Serializable]
public class CharacterData
{
    public int id; // 编号
    public string name; // 名称
    public string description; // 描述
    public CharacterJob job; // 职业
    public int ai; // 调用ai
    public int hp; // 血量
    public float act; // 攻击
    public float treatment; // 治疗系数
    public float def; // 防御
    public float spd; // 移动
    public float crit; // 暴击
    public float miss; // 闪避概率
    public int skill1; // 普通攻击
    public string skill2; // 技能攻击
    public List<int> active_skills = new List<int>(); // 主动技能列表
    public int skill3; // 被动技能
    public int hp_up; // 血量成长
    public float act_up; // 攻击成长
    public float def_up; // 防御成长
    public float spd_up; // 移动成长
    public float crit_up; // 暴击成长
    public int hp_1; // 数值1(表示1-5星)
    public int atk; // 数值2
    public int def_1; // 数值3
    public int spd_1; // 数值4
}

这里我故意留了个坑,勇者的HP传入的是string。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;

public class TestManager : MonoBehaviour
{

    public TextAsset characterJson;//传进来的json
    Dictionary<int, CharacterData> _characterDatas=new Dictionary<int, CharacterData>();//用于存储json的字典

    public static string ARCHIVE_KEY_V1;//存档数据转换为的string
    UserData userData;//接收存档数据
    private void Start()
    {
        LoadCharacterData();
    }

    protected void LoadCharacterData()//读配置表
    {
        if (characterJson != null)
        {
            JArray array = JArray.Parse(characterJson.text);//读取json
            List<CharacterData> datas = array.ToObject<List<CharacterData>>();//json转list
            foreach (CharacterData character in datas)//list转字典
            {
                string[] arr = character.skill2.Split(",");//把json中带,的部分拆成数组
                foreach (string skill in arr)
                {
                    int id = int.Parse(skill);//把数组中的string转int
                    if (id > 0)
                    {
                        character.active_skills.Add(id);//存储这个id
                    }
                }

                _characterDatas.Add(character.id, character);//填充字典
            }
        }
        else
        {
            Debug.LogError("Character data undefined!!!");
        }
    }


    public void LoadArchiveData()//读档,把String转成Class然后读档
    {
        if (PlayerPrefs.HasKey(ARCHIVE_KEY_V1))
        {
            string str = PlayerPrefs.GetString(ARCHIVE_KEY_V1);
            userData = JsonConvert.DeserializeObject<UserData>(str);

        }
    }

    public void SaveGameData()//存档,把String转成Class然后读档
    {

         string jsonStr = JsonConvert.SerializeObject(userData);
         PlayerPrefs.SetString(ARCHIVE_KEY_V1, jsonStr);
        
    }

    
}
public class UserData//存档数据
{
    public int Lv;
    public int Money;
}

这是读表,存档和读档的3个方法。用Newtonsoft读表后string自动转乘了接收类型里的int。没有报错。

Newtonsoft拖入unity工程文件即可

Exele2Json是个小程序。windows里打开即可

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值