接下来需要为不同面板添加不同的脚本
1.在总的canvas下添加脚本
这个只是用来存储题目和最终分数
2.在答题面板下添加
Question Buttons 用来控制显示什么按钮
Question 用来读取txt并处理相关参数
按钮交互:(点击按钮是传入函数中不同的参数)
3.脚本
①QuestionCounts.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class QuestionCounts : MonoBehaviour { public int counts = 0; public int ques_counts = 0; public int all_questions = 5; //每种类型有多少题目 public int sel_counts = 20; public int fill_counts = 17; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } }
②QuestionButtons.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class QuestionButtons : MonoBehaviour { public GameObject sel ; public GameObject tf; public InputField answer; // Use this for initialization void Start () { } void enableSel(){ sel.SetActive (true); } void disableSel(){ sel.SetActive (false); } void enableTF(){ tf.SetActive (true); } void disableTF(){ tf.SetActive (false); } // Update is called once per frame void Update () { } }
③Questions.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.IO; //与按钮交互的题目 public class Questions : MonoBehaviour { public Text m_text; public QuestionCounts m_counts; private bool select = false; public string [] questions = new string[100]; public QuestionButtons buttons; //分为填空题以及选择题 private string url_select = ""; private string url_fill = ""; //对应第几道题目以及什么题目 private int ques_count = 0; private int ques_line = 2; //已经显示题目 private List<int> sel_list = new List<int>(); private List<int> fill_list = new List<int>(); //存储正确答案 private string fill_answer; private int true_answer = -1; enum Type{ Selection = 0, Fill = 1 }; private Type ques_type; // Use this for initialization void Start () { //加载打包项目下的txt文件 string DPath = Application.dataPath; int num = DPath.LastIndexOf ("/"); DPath = DPath.Substring (0, num); url_select = DPath + "/Assets/question/select_question.txt"; url_fill = DPath + "/Assets/question/fill_question.txt"; //对应不同的题目进行不同的初始化操作 ques_type = Random.Range (0, 10) > 5 ? Type.Fill : Type.Selection; switch (ques_type) { case Type.Selection: { ques_count = Random.Range (0, m_counts.sel_counts ); sel_list.Add (ques_count); ques_line = 3; readText (url_select, ques_count, ques_line); buttons.sel.SetActive (true); buttons.tf.SetActive (false); break; } case Type.Fill: { ques_count = Random.Range (0, m_counts.fill_counts); fill_list.Add (ques_count); ques_line = 2; readText (url_fill, ques_count, ques_line); buttons.sel.SetActive (false); buttons.tf.SetActive (true); break; } } } string ReadFile(string FileName, int ques_count,int ques_line){ //ques_count为第几道题目 从0开始 //que_line 为题目的行数 包含答案行 //返回的是题目 System.Text.Encoding.GetEncoding ("gb2312"); string[] strs = File.ReadAllLines (FileName, System.Text.Encoding.Default); if (ques_count == -1) { return "no data"; } else{ string question = ""; for (int i = ques_count * ques_line; i < ((ques_count + 1) * ques_line - 1); i++){ question += strs [i]; question += "\n"; } return question; } } string ReadAnswer(string Filename, int ques_count, int ques_line){ //返回题目的答案哪一行的string 需要后续的处理 System.Text.Encoding.GetEncoding ("gb2312"); string[] strs = File.ReadAllLines (Filename, System.Text.Encoding.Default); if (ques_count <= -1) { return "no data"; } else{ string answer = ""; answer = strs [(ques_count+1) * ques_line - 1]; return answer; } } //确定正确答案的按钮 void processAnswer(string Filename, int ques_count, int ques_line,Type ques_type){ string answer = ReadAnswer (Filename, ques_count, ques_line); switch (ques_type) { case Type.Selection: { buttons.sel.SetActive (true); switch (answer){ case "A": true_answer = 0; break; case "B": true_answer = 1; break; case "C": true_answer = 2; break; } break; } case Type.Fill: { switch (answer) { case "true": true_answer = 0; break; case "false": true_answer = 1; break; } break; } } } //最终显示在面板text上 void readText(string url, int ques_count, int ques_line){ string text = ReadFile(url, ques_count, ques_line); m_text.text = text.ToString(); processAnswer (url, ques_count, ques_line,ques_type); } //每次答题后初始化与题目相关的参数 void initQuestion(){ ques_type = Random.Range (0, 10) > 5 ? Type.Fill : Type.Selection; switch (ques_type) { case Type.Selection: { ques_count = Random.Range (0, m_counts.sel_counts ); while (sel_list.Contains (ques_count)) { ques_count = Random.Range (0, m_counts.sel_counts ); } sel_list.Add (ques_count); ques_line = 3; readText (url_select, ques_count, ques_line); buttons.sel.SetActive (true); buttons.tf.SetActive (false); break; } case Type.Fill: { ques_count = Random.Range (0, m_counts.fill_counts); while (fill_list.Contains (ques_count)) { ques_count = Random.Range (0, m_counts.fill_counts); } fill_list.Add (ques_count); ques_line = 2; readText (url_fill, ques_count, ques_line); buttons.sel.SetActive (false); buttons.tf.SetActive (true); break; } } } //处理选择题的参数 public void sel_addCounts(int i){ //选择题中按钮传入0,1,3,4 //填空题传入string if( true_answer == i){ m_counts.counts += 1; } m_counts.ques_counts += 1; if (m_counts.ques_counts < m_counts.all_questions) { initQuestion (); } else { buttons.sel.SetActive (false); buttons.tf.SetActive (false); string text = "your counts is :" + m_counts.counts.ToString (); m_text.text = text; } } //处理填空题的参数 public void fill_addCounts(int i){ //string answer = buttons.answer.text.ToString(); if (i==true_answer){ m_counts.counts += 1; } m_counts.ques_counts += 1; //将inputField 清空 //buttons.answer.text=""; if (m_counts.ques_counts < m_counts.all_questions) { initQuestion (); } else { buttons.sel.SetActive (false); buttons.tf.SetActive (false); string text = "your counts is :" + m_counts.counts.ToString (); m_text.text = text; } } // Update is called once per frame void Update () { } }