Files
Echo/Assets/_Project/Docs/UI_Input_and_Subscription_Pitfalls.md
T
2026-07-08 20:42:51 +08:00

1.8 KiB
Raw Blame History

UI 输入与事件订阅注意事项(本项目)

目标:记录本项目在 Input System + UI 面板切换下的常见坑,以及已落地的修复点,便于快速排错。

一、玩家输入(新 Input System

  • 输入资源:Assets/_Project/Input/Input_Player.inputactions
  • 玩家控制器读取方式:通过 PlayerInput.actions["Move"/"Look"/"Jump"/"Interact"] 订阅回调缓存输入值。

二、UI 打开时“锁定 WASD/互动”的推荐方式

  • 采用统一服务禁用组件,而不是改 InputActions
  • 原因:
    • 不侵入 inputactions 配置
    • UI 多层叠加时可重入(owner 计数)

三、InventoryUI 的事件订阅坑(已修复)

现象:

  • 打开/关闭 UI 多次后,热键触发次数异常、手持物显示/动画行为异常等。

根因:

  • performed += ctx => ... 形式订阅时,OnDisable 用同样的 lambda 进行 -= 并不会移除原订阅(lambda 实例不同)。

修复:

  • 缓存 delegate 引用,在 OnDisable 用同一引用反订阅。
  • 相关实现:InventoryUI.cs

四、AI 平板 UI 与输入锁的协作(TabletController

  • 打开平板时应同时:
    • 禁用玩家控制
    • 解锁并显示鼠标
  • 关闭平板时恢复
  • 本项目已接入统一锁服务,并在未拖引用时自动查找 PlayerController