一、拿到了题库
分析一下可以定义的
1、序号,用来区分题目数,每个题有唯一的序号
2、题目,就是下图的Q
3、预设的回答,下图的A
分析完我可以知道有三个字段,分别是int index、string Q、string A。
二、把字段丢到Excel表格里
第一行写字段,下面再写数据
三、通过一些工具把Excel转化成Json文件
可以看到生成的Json文件是这样的
看着稍微有点乱,可以用格式化工具调整一下
这是我常用的格式化工具
在线JSON校验格式化工具(Be JSON)
这样就可以清晰分辨我们的题目和预设回答了,一些小调整也可以直接在这里处理
四、改Json文件
新建一个txt文本,把刚刚生成的数据全部粘贴进文本里,并把后缀改成.json
这样就是一个合格的Json文件了
五、生成C#类
还是刚刚那个网站,找到Json转C#实体类,把你的Json文件丢进去他就能帮你生成一个C#类
在Unity里新建一个QAData类,复制这些生成的这些就好了(生成的一般都是Root,改成自己的类)。
六、Json解析
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;public class Test : MonoBehaviour
{void Start(){StartCoroutine(LoadJson(Application.streamingAssetsPath + "/QA.json",JsonHandle));}/// <summary>/// 处理Json数据/// </summary>void JsonHandle(string jsonData) {Debug.Log(jsonData);QAData qAData = JsonConvert.DeserializeObject<QAData>(jsonData);Debug.Log(" 共有" + qAData.QA.Count + "题");foreach (var item in qAData.QA){Debug.Log(item.index); Debug.Log(item.Q); Debug.Log(item.A);}}/// <summary>/// 读取Json数据/// </summary>/// <param name="path"></param>/// <param name="action"></param>/// <returns></returns>IEnumerator LoadJson(string path,UnityAction<string> action = null){// 提取Json文件UnityWebRequest www = UnityWebRequest.Get(path);yield return www.SendWebRequest();if (www.result == UnityWebRequest.Result.Success){string jsonString = www.downloadHandler.text;action?.Invoke(jsonString);}else{Debug.Log("读取失败");}}
}
这样就全部拆出来了,答题系统也是一样的思路。
这样做的好处是,当需要外部去修改题库时也无需重新打包,直接改Json文件就好了