using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; using AX.MessageSystem; /// /// Question.cs——CSV信息类 /// public class Question { /// /// id /// public string ID { get; set; } /// /// 类型(1单选,2多选,3填空) /// public QuestionType Type { get; set; } /// /// 描述 /// public string Description { get; set; } /// /// 内容 /// public List Content { get; set; } /// /// 选择题结果 /// public Dictionary SelectionResult = new Dictionary(); /// /// 评分结果 /// public Dictionary ScoreResult = new Dictionary(); } public enum QuestionType { RadioSelect = 1, MultiSelect = 2, FillInTheBlanks = 3 } public class QuestionItem : MonoBehaviour { // 单选按钮预设 public GameObject RadioSelectItem; // 多选按钮预设 public GameObject MultiSelectItem; // 填空按钮预设 public GameObject FillInTheBlanksItem; // Item父对象 public GameObject ItemParent; // 问题描述 public Text QuestionDescription; // Question private Question Data; public IEnumerator SetData(Question question) { Data = question; if (Data.ID == "2" || Data.ID == "1") { // 参演人员打分 ItemParent.GetComponent().cellSize = new Vector2(1100, 50); } QuestionDescription.text = string.Format("{0}", Data.Description); for (int i = 0; i < Data.Content.Count; i++) { GameObject obj = null; switch (Data.Type) { case QuestionType.RadioSelect: obj = Instantiate(RadioSelectItem); break; case QuestionType.MultiSelect: obj = Instantiate(MultiSelectItem); break; case QuestionType.FillInTheBlanks: obj = Instantiate(FillInTheBlanksItem); break; } // 记录问题位置,大小 Vector3 tempPos = obj.transform.localPosition; Vector3 tempSca = obj.transform.localScale; // 设置父对象 obj.transform.SetParent(ItemParent.transform); obj.transform.localPosition = tempPos; obj.transform.localScale = tempSca; // 获取ItemScript QuestionSubItem sub = obj.GetComponent(); sub.UIText.text = Data.Content[i]; string key = Data.Content[i]; if (Data.Type == QuestionType.FillInTheBlanks) { // 添加结果 Data.ScoreResult.Add(key, 0); // 添加事件 sub.UIInput.onEndEdit.AddListener(a => { if (string.IsNullOrEmpty(a)) { return; } int temp = int.Parse(a); temp = Mathf.Clamp(temp, 1, 10); sub.UIInput.text = temp.ToString(); Data.ScoreResult[key] = temp; //Debug.Log(string.Format("结果有{0}条,当前是第{1}条,结果{2}", Data.Result.Count, num, Data.Result[num])); MessageDispatcher.SendMessage("CHECK_QUESTION_BUTTON"); }); } else { if (Data.Type == QuestionType.RadioSelect) { // 单选组 sub.UIToggle.group = ItemParent.GetComponent(); } // 添加结果 Data.SelectionResult.Add(key, false); // 添加事件 sub.UIToggle.onValueChanged.AddListener(a => { Data.SelectionResult[sub.UIText.text] = a; //Debug.Log(string.Format("单选结果为:{0}", Data.Result[0])); MessageDispatcher.SendMessage("CHECK_QUESTION_BUTTON"); }); } yield return new WaitForEndOfFrame(); } // 调整大小 SetSize(); } private void SetSize() { RectTransform temp = (ItemParent.transform as RectTransform); float y = temp.sizeDelta.y; RectTransform itemRect = (transform as RectTransform); itemRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, y + 40); } }