Unity 2D中如何让TMP输入框按回车后持续接收输入?
解决Unity TMP输入框回车提交后持续保持选中的问题
核心思路
在输入框完成文本提交逻辑后,强制重新激活输入框并锁定焦点,避免用户需要手动点击才能继续输入。
具体实现方法
方法一:通过代码监听提交事件并重置焦点
创建脚本挂载到你的TMP InputField对象上,监听提交事件并在处理完成后重新激活输入框:
using UnityEngine; using TMPro; using UnityEngine.EventSystems; public class PersistentInputField : MonoBehaviour { private TMP_InputField _inputField; void Start() { _inputField = GetComponent<TMP_InputField>(); // 绑定提交事件 _inputField.onSubmit.AddListener(HandleInputSubmit); // 初始激活输入框 _inputField.ActivateInputField(); } void HandleInputSubmit(string submittedText) { // 替换为你的实际提交逻辑,比如解析控制台命令、输出日志等 Debug.Log("用户输入: " + submittedText); // 清空输入框(根据需求选择是否保留) _inputField.text = string.Empty; // 强制设置事件系统选中当前输入框 EventSystem.current.SetSelectedGameObject(_inputField.gameObject); // 激活输入框并将光标移至末尾 _inputField.ActivateInputField(); _inputField.MoveTextEnd(false); } }
方法二:调整输入框UI设置辅助优化
- 打开TMP InputField的Inspector面板,找到Navigation选项,将所有方向(Up/Down/Left/Right)的选择目标设置为输入框自身,避免焦点被其他UI元素抢走。
- 确保Read Only选项未勾选,Activate On Select选项处于勾选状态。
- 检查是否有其他脚本在执行过程中调用了
DeactivateInputField()或修改了事件系统的选中对象,这类逻辑会导致输入框失去焦点。
注意事项
- 如果提交逻辑包含异步操作(比如加载资源、网络请求),需要在异步操作完成后再执行重新激活输入框的代码,否则可能出现时序问题导致焦点无法重置。
- 测试时确保场景中只有一个EventSystem对象,多个EventSystem可能导致焦点管理混乱。
内容的提问来源于stack exchange,提问作者TheJolt70000
相关产品推荐
相关产品推荐

