一、拿到了题库
分析一下可以定义的
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文件就好了