我的输入文本没有保存而是返回到 Unity 中的原始值

问题描述

我正在尝试从输入字段读取输入并单击一个按钮来存储该文本,我还想为下一个输入重置输入字段。但是,随着输入字段的恢复,保存的数据再次与输入字段一起更改!任何人都可以帮我解决这个问题吗?
公共 InputField 输入; 公共按钮确认;

// Update is called once per frame
void Update()
{
    confirm.onClick.AddListener(readchartLabelInputOnClick);
    Debug.Log(PlayerPrefs.GetString("chartLabel"));
}
public void readchartLabelInputOnClick()
{
    PlayerPrefs.SetString("chartLabel",input.text);
    input.text = "Enter Text...";
}

这是我的调试截图:

enter image description here

看起来 addListener 多次调用函数。我应该如何改变它?

解决方法

  1. 您应该在 confirm.onClick.AddListener(readchartLabelInputOnClick)Start() 中添加 Awake() 而不是 Update(),因为在您的程序的现代状态下,它会为事件 Click 每添加一个监听器框架,所以当你点击按钮时,它会开始很多 readchartLabelInputOnClick()。这就是背后的原因

看起来 addListener 调用了很多次函数。

  1. 出于同样的原因,在第一个 readchartLabelInputOnClick() 写入并在“chartLabel”中发送输入文本后,它会立即被 readchartLabelInputOnClick() 的新实例覆盖,其中 input.text 现在是“输入文本..."
,

我提出了一个替代解决方案。

我会首先在场景中的按钮中(在OnClick()中)放置一个方法以避免调用Update(),当然该方法也会在脚本中,当启动时,它会获取用 input.text 删除文本,然后用 input.text = "" 删除它 如果您在场景中的 placeholder 中放置 inputfield,您甚至不需要从脚本中输入“输入文本...”,而且您也不必每次都将其删除插入文本。