1. 質問バンクを手に入れた
定義できるものを分析する
1. 問題数を識別するためのシリアル番号各問題には固有のシリアル番号が付いています。
2.問題は下の写真の Q です
3.デフォルトの答え、下の図の A
分析後、 int インデックス、文字列 Q、文字列 A という 3 つのフィールドがあることがわかります。
2. フィールドを Excel テーブルに投入します
1 行目にフィールドを記述し、その下にデータを記述します。
3. いくつかのツールを使用して Excel を Json ファイルに変換します
生成されたJsonファイルは次のようになっていることがわかります。
少し乱雑に見えますが、書式設定ツールを使用して調整できます。
これは私がよく使う書式設定ツールです
このようにして、質問と事前に設定された回答を明確に区別でき、いくつかの小さな調整もここで直接処理できます。
4. Jsonファイルを変更する
新しい txt テキストを作成し、生成されたすべてのデータをテキストに貼り付け、サフィックスを .json に変更します。
これは修飾された Json ファイルです
5. C#クラスの生成
先ほども Web サイトで Json to C# エンティティ クラスを見つけ、そこに Json ファイルを投げ込むと、C# クラスが生成されます。
Unity で新しいQAData クラスを作成し、生成されたクラスをコピーします (生成されたクラスは通常ルートなので、独自のクラスに変更します)。
6. 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 ファイルを直接変更するだけで済むことです。