1. Tenho o banco de perguntas
Analise o que pode ser definido
1. Número de série, usado para distinguir o número de questões. Cada questão possui um número de série único.
2. A pergunta é Q na imagem abaixo
3. Resposta padrão , A na imagem abaixo
Após análise, posso saber que existem três campos, nomeadamente índice int, string Q e string A.
2. Jogue os campos na tabela do Excel
Escreva os campos na primeira linha e depois escreva os dados abaixo.
3. Converta Excel em arquivos Json por meio de algumas ferramentas
Isso é o que eu normalmente uso, basta colocar o Excel nele.
Você pode ver que o arquivo Json gerado se parece com isto
Parece um pouco bagunçado, você pode usar a ferramenta de formatação para ajustá-lo.
Esta é minha ferramenta de formatação comumente usada
Ferramenta online de verificação e formatação JSON (Be JSON)
Desta forma, as nossas perguntas e respostas predefinidas podem ser claramente distinguidas, e alguns pequenos ajustes também podem ser processados diretamente aqui.
4. Altere o arquivo Json
Crie um novo texto txt, cole todos os dados recém-gerados no texto e altere o sufixo para .json
Este é um arquivo Json qualificado
5. Gere classe C#
Ainda no site agora, encontre a classe de entidade Json para C#, coloque seu arquivo Json nela e ele gerará uma classe C# para você.
Crie uma nova classe QAData no Unity e copie as geradas (as geradas geralmente são Root, altere-as para suas próprias classes).
6. Análise 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("读取失败");
}
}
}
Dessa forma, tudo se desmonta e o sistema de perguntas e respostas segue a mesma ideia.
A vantagem disso é que quando você precisar modificar o banco de questões externamente, não será necessário reempacotá-lo, apenas altere o arquivo Json diretamente.