You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:25:55