1.8 KiB
1.8 KiB
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: