using System.Collections.Generic; using TMPro; using UnityEngine; using DefaultNamespace.ProcessMode; using Framework.Manager; /// /// 输入框验证组件 /// 可以挂载到任何 TMP_InputField 上,实现输入正确后自动跳转引导 /// public class TMPInputFieldValidator : MonoBehaviour { [Header("验证设置")] [Tooltip("是否启用自动跳转功能")] [SerializeField] private bool enableAutoJump = true; [Tooltip("是否启用调试日志")] [SerializeField] private bool enableDebugLog = true; [Tooltip("验证延迟时间(秒),避免频繁验证")] [SerializeField] private float validationDelay = 0.5f; private TMP_InputField inputField; private string lastValidatedValue = ""; /// /// 初始化组件 /// private void Awake() { inputField = GetComponent(); if (inputField == null) { Debug.LogError($"InputFieldValidator: 在 {gameObject.name} 中未找到 TMP_InputField 组件!"); return; } // 监听输入变化事件 inputField.onValueChanged.AddListener(OnInputValueChanged); if (enableDebugLog) { Debug.Log($"InputFieldValidator: 初始化完成 - {gameObject.name}"); } } /// /// 输入值变化回调 /// /// 输入值 private void OnInputValueChanged(string value) { // 检查是否与上次验证的值相同 if (value == lastValidatedValue) { return; } // 立即执行验证(移除防抖延迟) ValidateInput(value); } /// /// 验证输入并自动跳转 /// /// 输入值 private void ValidateInput(string value) { lastValidatedValue = value; if (enableDebugLog) { Debug.Log($"InputFieldValidator: 开始验证输入 - 输入框: {gameObject.name}, 值: {value}"); } // 使用新的严谨验证方法:验证输入是否匹配当前动作的正确答案,传递UI的Instance ID string uiInstanceId = gameObject.GetInstanceID().ToString(); bool isInputCorrect = MotionFramework.MotionEngine.GetModule().ValidateInputAgainstCurrentAction(value, uiInstanceId); if (isInputCorrect) { if (enableDebugLog) { Debug.Log($"InputFieldValidator: 输入正确自动跳转 - 输入框: {gameObject.name}, 值: {value}"); } if (enableAutoJump) { // 输入正确,直接跳转到下一个引导步骤(不调用 HandleClick) InterfaceManager.LoadTriggerNextGuide(); } } else { if (enableDebugLog) { Debug.Log($"InputFieldValidator: 输入错误,不跳转 - 输入框: {gameObject.name}, 值: {value}"); } } } /// /// 手动触发验证 /// public void TriggerValidation() { if (inputField != null && !string.IsNullOrWhiteSpace(inputField.text)) { ValidateInput(inputField.text); } } /// /// 设置是否启用自动跳转 /// /// 是否启用 public void SetAutoJumpEnabled(bool enabled) { enableAutoJump = enabled; if (enableDebugLog) { Debug.Log($"InputFieldValidator: 自动跳转功能 {(enabled ? "启用" : "禁用")} - {gameObject.name}"); } } /// /// 设置验证延迟时间 /// /// 延迟时间(秒) public void SetValidationDelay(float delay) { validationDelay = Mathf.Max(0f, delay); if (enableDebugLog) { Debug.Log($"InputFieldValidator: 验证延迟设置为 {validationDelay} 秒 - {gameObject.name}"); } } /// /// 清除输入框内容 /// public void ClearInput() { if (inputField != null) { inputField.text = ""; lastValidatedValue = ""; } } /// /// 获取当前输入值 /// /// 当前输入值 public string GetCurrentValue() { return inputField?.text ?? ""; } }