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

Unity InputField输入数字时 文本转int变量未实时更新

问题根因
  • Start()方法内重新声明了同名局部变量int d,赋值操作仅作用于这个临时局部变量,根本不会修改类的公共成员变量d
  • Start()是Unity生命周期方法,仅在脚本首次激活时执行1次,后续在输入框输入内容时,没有任何逻辑触发变量同步
  • 直接调用int.Parse没有做异常捕获,用户输入非数字、空内容时会直接抛出运行时错误
修复实现
  1. 删除Start()里的同名局部变量声明,避免作用域混淆
  2. 给InputField绑定onValueChanged事件,每次输入内容变化时自动同步值
  3. 增加输入合法性校验,避免非法输入导致崩溃
  4. 可直接在输入框组件上设置内容类型为整数输入,从源头限制用户只能输入数字

修复后的完整代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class Player : MonoBehaviour
{
    public int d;
    public InputField convertInput;

    void Start()
    {
        // 初始化时给输入框绑定内容变更监听
        convertInput.onValueChanged.AddListener(OnInputValueChange);
        // 初始化读取输入框默认值
        OnInputValueChange(convertInput.text);
    }

    /// <summary>
    /// 输入框内容变更时触发的同步逻辑
    /// </summary>
    /// <param name="inputText">当前输入框文本内容</param>
    private void OnInputValueChange(string inputText)
    {
        // 空值兜底,解析失败默认设为0
        if (string.IsNullOrEmpty(inputText) || !int.TryParse(inputText, out d))
        {
            d = 0;
        }
    }

    // 脚本销毁时移除监听,避免内存泄漏
    private void OnDestroy()
    {
        convertInput.onValueChanged.RemoveListener(OnInputValueChange);
    }
}
额外配置说明

选中挂载Player脚本的对象,把场景里对应的InputField组件拖到convertInput的公开字段槽位即可;如果要限制输入只能是数字,选中InputField组件,在Inspector面板把Content Type设置为Integer Number,用户就无法输入字母、特殊符号等非法内容。

内容的提问来源于stack exchange,提问作者Njla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:21:54