Unity中Android移动端空InputField删除键检测与停用问题
解决Android端空InputField按删除键不触发事件的方案
方案1:通过EventTrigger监听编辑命令
- 给目标InputField组件添加
EventTrigger组件 - 点击EventTrigger的
Add New Event Type,选择Edit Command - 绑定如下处理逻辑的代码:
using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class EmptyInputDeleteHandler : MonoBehaviour { public InputField targetInput; public void OnEditCommand(BaseEventData eventData) { var editEvent = eventData as EditCommandEventData; if (editEvent.command == EditCommand.DeleteBackward && string.IsNullOrEmpty(targetInput.text)) { // 停用InputField targetInput.DeactivateInputField(); } } }
- 将脚本挂载到任意GameObject上,把目标InputField拖入
targetInput字段,再把脚本的OnEditCommand方法绑定到EventTrigger的Edit Command事件中。
方案2:自定义InputField子类全局处理
继承原生InputField重写事件逻辑,所有使用该自定义组件的输入框都能自动生效:
using UnityEngine; using UnityEngine.UI; public class CustomInputField : InputField { protected override void OnProcessEditCommand(EventSystems.EditCommand command) { base.OnProcessEditCommand(command); // 捕获删除后退命令,且当前输入框为空时停用 if (command.name == "DeleteBackward" && string.IsNullOrEmpty(text)) { DeactivateInputField(); } } }
使用时,直接替换场景中原生的InputField组件为这个CustomInputField即可。
关键说明
移动端软键盘的删除键不会触发Unity的Input.GetKeyDown检测,只能通过编辑命令事件捕获;判断DeleteBackward命令即可对应删除键操作,确保空输入框触发时执行停用逻辑。
内容的提问来源于stack exchange,提问作者unitydevelopmentquestions
相关产品推荐
相关产品推荐

