Unity3d中InputField文本与目标文本对比失效问题求助
解决InputField字符串对比失效的问题
核心问题排查与解决步骤
1. 输入文本含首尾空格(最常见原因)
你当前代码只做了大写转换,但如果输入时不小心带了首尾空格(比如输入MR ),Txt会变成MR ,和MR对比自然不匹配。修改读取文本的代码,先去除首尾空格:
Txt = inputFieldInMainUi.text.Trim().ToUpper();
2. 检查InputField组件是否绑定
打开Inspector面板,确认InputFieldComparision脚本的inputFieldInMainUi字段,已经拖入了场景中的InputField组件。如果没绑定,运行时会触发空引用错误,Txt始终为空,对比肯定失效。
3. 替换Update循环为输入完成事件(优化+避免误触发)
你现在在Update里每一帧都判断,会导致输入过程中(比如刚输入M)就触发menu的逻辑,体验极差。改用InputField的On End Edit事件,仅在用户输入完成(按回车/点击输入框外)时执行判断:
- 选中场景中的InputField,在Inspector的
Events面板找到On End Edit - 把挂载脚本的物体拖到事件槽,选择
InputFieldComparision -> CheckInput()
修改后的代码:
using UnityEngine; using UnityEngine.UI; public class InputFieldComparision : MonoBehaviour { public InputField inputFieldInMainUi; private string Txt; // 绑定到InputField的OnEndEdit事件 public void CheckInput() { Txt = inputFieldInMainUi.text.Trim().ToUpper(); Debug.Log(Txt); #region comparison if (Txt == "MR") { Debug.Log("Move Right"); } else if (Txt == "MM") { Debug.Log("move middle"); } else if (Txt == "ML") { Debug.Log("move left"); } else if (Txt == "J") { Debug.Log("jump"); } else if (Txt == "M") { Debug.Log("menu"); } else if (Txt == "Q") { Debug.Log("quit"); } #endregion // 可选:输入完成后清空输入框,方便下次输入 inputFieldInMainUi.text = ""; } }
4. 确认目标字符串大小写
虽然你用了ToUpper()转换输入文本,但要确保条件判断里的目标字符串都是大写(比如你写的"MR"是对的,如果写成"mr"就会匹配失败),检查所有判断分支的字符串。
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

