using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 题目信息生成
/// 需要SyncObjLink3类统一管理问题专用HUD信息
/// Z 530
/// </summary>
public class ToggleControl : MonoBehaviour
{
[Header("问题和多选答案信息设置")]
public string QuestionText;
public string[] AnswerText = { };
public int[] RightIndex;
//
private int ChoosedRight = 0;
private float WaitTime = 0.5f;
//存放选中的toggle
List<string> ClickToggleStrings = new List<string>();
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
/// <summary>
/// 在需要答题时执行一次此方法
/// </summary>
public void ShowQuestionMotion()
{
StartCoroutine(nameof(StepMotion));
for (int i = 0; i < 6; i++)
{
//初始化显示项
SyncObjLink3._instance.QuestionAnswerToggles[i].SetActive(true);
//题目为空跳过
if (AnswerText[i] == "")
{
SyncObjLink3._instance.QuestionAnswerToggles[i].SetActive(false);
continue;
}
//答案项
SyncObjLink3._instance.QuestionAnswerToggles[i].transform.GetChild(1).GetComponent<Text>().text = AnswerText[i];
//将答案项选中状态重置
SyncObjLink3._instance.QuestionAnswerToggles[i].GetComponent<Toggle>().isOn = false;
ClickToggle(SyncObjLink3._instance.QuestionAnswerToggles[i], AnswerText[i]);
}
//移除监听
SyncObjLink3._instance.SubmitBtn.onClick.RemoveAllListeners();
//添加监听
SyncObjLink3._instance.SubmitBtn.onClick.AddListener(()=>
{
//判断每次点击的正确数量是否等于设置的正确答案数量,且保存点击的答案数量是否等于设置的正确答案数量,
//当两者都满足时,多选题回答正确。
if (ChoosedRight == RightIndex.Length && ClickToggleStrings.Count == RightIndex.Length)
{
print("正确时:");
SyncObjLink3._instance.SubmitBtn.onClick.RemoveAllListeners();
if (transform.parent.GetComponent<EventActionMotion>().NextEvent != null)
{
StartCoroutine(nameof(YielFrameUINext));
}
}
else
{
//具有正确答案的流程
if(RightIndex.Length != 0)
{
print("错误时:");
SyncObjLink3._instance.FHudUI.SetActive(true);
Invoke(nameof(OnDisappear), 3f);
}
//没有正确答案的流程
else
{
//如果选择了指挥组
if(ClickToggleStrings.Contains("指挥组") && ClickToggleStrings.Count == 1)
{
print("指挥组");
SyncObjLink3._instance.QuestionHudUI.SetActive(false);
View_Main._instance.StartBoom0Events();
}
if (ClickToggleStrings.Contains("搜索标定组") && ClickToggleStrings.Count == 1)
{
print("搜索标定组");
SyncObjLink3._instance.QuestionHudUI.SetActive(false);
View_Main._instance.StartBoom1Events();
}
if (ClickToggleStrings.Contains("排爆组") && ClickToggleStrings.Count == 1)
{
print("排爆组");
}
}
}
});
}
private void OnDisappear()
{
SyncObjLink3._instance.FHudUI.SetActive(false);
}
IEnumerator YielFrameUINext()
{
yield return new WaitForSeconds(1f);
SyncObjLink3._instance.QuestionHudUI.SetActive(false);
yield return new WaitForSeconds(2f);
transform.parent.GetComponent<EventActionMotion>().NextEvent.Invoke();
}
/// <summary>
/// 显示答题面板,赋值题目
/// </summary>
/// <returns></returns>
IEnumerator StepMotion()
{
yield return new WaitForSeconds(WaitTime);
SyncObjLink3._instance.QuestionHudUI.gameObject.SetActive(true);
if (QuestionText != "")
{
SyncObjLink3._instance.QuestionText.text = QuestionText;
}
}
/// <summary>
/// 点击时
/// </summary>
/// <param name="obj">点击了?</param>
/// <param name="toggleText">点击项的文字</param>
private void ClickToggle(GameObject obj, string toggleText)
{
//先重置监听
obj.transform.GetComponent<Toggle>().onValueChanged.RemoveAllListeners();
//添加监听
obj.transform.GetComponent<Toggle>().onValueChanged.AddListener(isOn =>
{
if (isOn)
{
ClickMethod(toggleText);
}
else
{
UNClickMethod(toggleText);
}
});
}
/// <summary>
/// 选中后的触发效果
/// </summary>
/// <param name="toggleText"></param>
private void ClickMethod(string toggleText)
{
//添加选中的toggle内容
ClickToggleStrings.Add(toggleText);
NowEventChooseItemIsTrue();
}
/// <summary>
/// 取消选中的触发效果
/// </summary>
/// <param name="toggleText"></param>
private void UNClickMethod(string toggleText)
{
//移除选中的toggle内容
ClickToggleStrings.Remove(toggleText);
NowEventChooseItemIsTrue();
}
/// <summary>
/// 当前事件的所选择的题目是正确的吗?
/// </summary>
private void NowEventChooseItemIsTrue()
{
//无论每次是否选择正确,都将当前选择的正确数量归零,在下次点击时再次计算。
ChoosedRight = 0;
//记录每次点击正确的数量
for (int j = 0; j < ClickToggleStrings.Count; j++)
{
for (int i = 0; i < RightIndex.Length; i++)
{
if (AnswerText[RightIndex[i]] == ClickToggleStrings[j])
{
ChoosedRight++;
}
}
}
}
}
Unity 生成问题,可以多选,单选或者无答案自由选择。(代码存档)
最新推荐文章于 2024-05-27 09:01:42 发布