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

Unity C#中TMP输入框onValueChanged循环触发问题求助

Unity双向货币兑换输入框循环触发问题解决方案

解决这个循环触发的核心思路是加一个更新锁——当我们主动修改其中一个输入框内容时,暂时屏蔽另一个输入框的事件响应,避免互相触发。以下是具体实现步骤:

1. 添加更新锁变量

在脚本中声明一个私有布尔变量,用来标记当前是否正在更新输入框内容:

private bool isUpdatingFields = false;

2. 修改转换方法,加入锁判断

更新你的两个转换逻辑方法,在执行修改操作前先检查锁状态,避免循环触发:

public void SellBuyUSDChange()
{
    // 正在更新时直接返回,阻断循环
    if (isUpdatingFields) return;

    // 上锁,标记开始更新流程
    isUpdatingFields = true;

    // 直接使用已引用的输入框,无需重复GetComponent
    string ctctxt = ClientSellorBuyCTCInput.text;
    // 用TryParse处理非数字输入,避免报错
    if (double.TryParse(ctctxt, NumberStyles.Any, CultureInfo.InvariantCulture, out double ctcAmount))
    {
        double ctcToUsd = ctcAmount / CTCValue;
        Debug.Log($"{ctcAmount} CTC is worth {ctcToUsd} USD");
        ClientSellorBuyUSDInput.text = ctcToUsd.ToString();
    }

    // 解锁,恢复正常事件响应
    isUpdatingFields = false;
}

public void SellBuyCTCChange()
{
    if (isUpdatingFields) return;

    isUpdatingFields = true;

    string usdtxt = ClientSellorBuyUSDInput.text;
    if (double.TryParse(usdtxt, NumberStyles.Any, CultureInfo.InvariantCulture, out double usdAmount))
    {
        double usdToCtc = CTCValue * usdAmount;
        Debug.Log($"{usdAmount} USD is worth {usdToCtc} CTC");
        ClientSellorBuyCTCInput.text = usdToCtc.ToString();
    }

    isUpdatingFields = false;
}

3. 优化输入框引用(可选但推荐)

确保你的ClientSellorBuyCTCInput和ClientSellorBuyUSDInput是直接声明为TMP_InputField类型的变量,并在Unity Inspector面板中拖入对应的输入框组件,这样就无需每次调用GetComponent<TMP_InputField>(),提升代码效率:

[SerializeField] private TMP_InputField ClientSellorBuyCTCInput;
[SerializeField] private TMP_InputField ClientSellorBuyUSDInput;
[SerializeField] private double CTCValue; // 汇率值,比如1 CTC = 5 USD的话,这里设为5

原理说明

当你在CTC输入框输入内容时,触发SellBuyUSDChange方法:

  • 首先上锁,此时即使修改USD输入框的text触发了它的onValueChanged事件,SellBuyCTCChange方法会因为检测到isUpdatingFields为true直接返回,不会再修改CTC输入框,彻底打破循环。
  • 转换完成后解锁,后续的输入操作可以正常触发转换逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:33:28