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

Unity中InputField输入文本保存后变回初始值问题如何解决?

Unity点击按钮存储输入框内容后数据被异常覆盖的解决方案

问题根源

你代码的核心问题是将AddListener注册监听的逻辑写在了Update生命周期函数中:

  • Update是每帧执行一次的函数,运行时间越长,给confirm按钮添加的点击监听就越多
  • 你点击一次按钮时,会按顺序触发所有已经添加的readchartLabelInputOnClick回调:
    1. 第一次回调执行:将当前输入框的真实内容存入PlayerPrefs,再把输入框内容重置为Enter Text...
    2. 后续N次回调执行:此时输入框内容已经是重置后的文本,会直接把Enter Text...覆盖写入PlayerPrefs,最终表现就是你保存的数据被同步修改为重置后的内容

修复代码

将监听注册逻辑移到Awake或Start中,保证全局只注册一次即可,优化后的代码如下:

public InputField input;
public Button confirm;

private void Awake()
{
    // 注册前先移除一遍,避免场景切换等情况导致重复注册,稳定性更高
    confirm.onClick.RemoveListener(readchartLabelInputOnClick);
    confirm.onClick.AddListener(readchartLabelInputOnClick);
}

// 原Update里的DebugLog如果没有每帧打印的必要可以直接删掉,减少性能消耗
private void Update()
{
    Debug.Log(PlayerPrefs.GetString("chartLabel"));
}

public void readchartLabelInputOnClick()
{
    PlayerPrefs.SetString("chartLabel", input.text);
    // 主动调用Save落盘,避免游戏异常退出时本次存储内容丢失
    PlayerPrefs.Save();
    input.text = "Enter Text...";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:03:02