Json-Multiple-Choice-Fragen: https://blog.csdn.net/falsedewuxin/article/details/129651872?spm=1001.2014.3001.5502
Json-Multiple-Choice-Fragen: https://blog.csdn.net/falsedewuxin/article/details/129653639?spm=1001.2014.3001.5502
1. Erstellen Sie ein einfaches UI-Antwortfeld und ein Bewertungsfeld
2. Erstellen Sie einen neuen DataTest-Ordner und erstellen Sie in diesem Ordner eine neue Json-Datei „MyData“.
Hinweis: Das Codierungsformat der JSON-Datei sollte UTF-8 sein, andernfalls werden verstümmelte chinesische Zeichen angezeigt (Sie können die JSON-Datei erstellen, sie mit Notepad öffnen und dann die Codierung ändern, wenn Sie sie speichern unter), falls dies der Fall ist wurde gespeichert als und ändert die Kodierung in UTF-8. Gehen Sie zurück zu Unity und klicken Sie auf die Datei, um sie anzuzeigen. Stellen Sie fest, dass die Zeichen immer noch verstümmelt sind. Sie können versuchen, eine neue Word-Datei zu erstellen und die Word-Datei in eine JSON-Datei zu ändern , und verwenden Sie dann Notepad, um es im UTF-8-Codierungsformat zu speichern
3. Fügen Sie die Fragendaten in JSON ein (die Frage und die Antwort sind gekritzelt).
{
"selects": [
{
"title": "1.c#的数据类型有",
"selectAnswer": [ "T", "F"],
"answer": "F"
},
{
"title": "2.下列描述错误的是",
"selectAnswer": [ "T", "F"],
"answer": "T"
},
{
"title": "3.下列关于构造函数的描述正确的是",
"selectAnswer": [ "T", "F"],
"answer": "T"
},
{
"title": "4.装箱、拆箱操作发生在",
"selectAnswer": [ "T", "F" ],
"answer": "F"
},
{
"title": "5.下列选项中可以被渲染的纹理是",
"selectAnswer": [ "T", "F" ],
"answer": "T"
}
]
}
Überprüfen Sie, ob das JSON-Format korrekt ist: https://www.bejson.com/
4. Fügen Sie dem Canvas eine Toggle Group-Komponente hinzu, aktivieren Sie die Eigenschaft „Ausschalten zulassen“, wählen Sie die vier Toggles aus und ziehen Sie den Canvas auf die Group-Eigenschaft der Toggle-Komponente der vier Toggles
5. Hängen Sie das Skript auf der Leinwand ein und ziehen Sie das entsprechende Objekt in die Skripteigenschaften
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
public class JsonTest : MonoBehaviour
{
Selections data;
//题目
public Text titleText;
//选项
public Toggle[] toggles = new Toggle[2];
//记录自己选择的所有答案
List<string> answers = new List<string>();
//记录答题时的临时答案
string ans = null;
//拿题库里面的答案
List<string> allAnswers = new List<string>();
int currentIndex = 0;
public Button last;
public Button next;
//得分
int score = 0;
//得分面板
public GameObject scorePanel;
// Start is called before the first frame update
void Start()
{
//Application.dataPath这个只对PC有效
string path = Application.dataPath + "/DataTest/MyData.json";
string str = File.ReadAllText(path);
data = JsonUtility.FromJson<Selections>(str);
//记录题库中的所有答案
for (int i = 0; i < data.selects.Count; i++)
{
allAnswers.Add(data.selects[i].answer);
}
for (int i = 0; i < allAnswers.Count; i++)
{
answers.Add(null);
}
ShowSelect(currentIndex);
}
//加载题目
public void ShowSelect(int index)
{
//显示题目
titleText.text = data.selects[index].title;
//显示题目
for (int i = 0; i < toggles.Length; i++)
{
toggles[i].transform.GetChild(1).GetComponent<Text>().text = data.selects[index].selectAnswer[i];
}
}
//检测选项是否点击
public void Tt(bool isSelect)
{
if (isSelect)
ans = "T";
else
ans=null;
}
public void Ft(bool isSelect)
{
if (isSelect)
ans = "F";
else
ans = null;
}
//下一题
public void NextSelect()
{
answers.RemoveAt(currentIndex);
answers.Insert(currentIndex, ans);
currentIndex++;
ans = null;
if (currentIndex < allAnswers.Count)
{
ShowSelect(currentIndex);
ShowAnswer(currentIndex);
}
else
{
for (int i = 0; i < allAnswers.Count; i++)
{
if (allAnswers[i].Equals(answers[i]))
{
score += 20;
}
}
scorePanel.SetActive(true);
scorePanel.transform.GetChild(0).GetComponent<Text>().text = "得分:" + score;
}
}
//上一题
public void LastSelect()
{
currentIndex--;
ans = null;
ShowSelect(currentIndex);
ShowAnswer(currentIndex);
}
//显示当前题目是否已经作答
public void ShowAnswer(int index)
{
for (int i = 0; i < toggles.Length; i++)
{
toggles[i].isOn = false;
}
switch (answers[index])
{
case "T":
toggles[0].isOn = true;
break;
case "F":
toggles[1].isOn = true;
break;
default:
break;
}
}
//再次答题按钮
public void AgainSelect()
{
answers.Clear();
for (int i = 0; i < allAnswers.Count; i++)
{
answers.Add(null);
}
score = 0;
currentIndex = 0;
ShowSelect(currentIndex);
ShowAnswer(currentIndex);
scorePanel.SetActive(false);
}
// Update is called once per frame
void Update()
{
//隐藏和显示上一题的按钮
if (currentIndex > 0)
{
last.gameObject.SetActive(true);
}
else
{
last.gameObject.SetActive(false);
}
if (currentIndex < allAnswers.Count-1)
{
next.transform.GetChild(0).GetComponent<Text>().text = "下一题";
}
else
{
next.transform.GetChild(0).GetComponent<Text>().text = "结束答题";
}
}
}
[System.Serializable]
public class SelectSingle
{
//名称要和SelectData.json中selects中的属性名中的一一对应
public string title;
public List<string> selectAnswer = new List<string>();
public string answer;
}
[System.Serializable]
public class Selections
{
//这里的selects必须和SelectData.json中的selects中一样才行
public List<SelectSingle> selects = new List<SelectSingle>();
}
6. Fügen Sie im Skript die entsprechenden Methoden für verschiedene Schalter und Schaltflächen hinzu
Umschalten
Taste
7. Führen Sie einfach Unity aus
Hinweis: Wenn es einen Fehler gibt, korrigieren Sie mich bitte
Fazit: Der Baum, der umarmt, entsteht am Ende der Haare; die neunstöckige Plattform beginnt auf dem Erdhaufen; die Reise von tausend Meilen beginnt mit einem einzigen Schritt.