Unity新输入系统:如何正确获取自定义1D轴的输入值?
解决Unity新输入系统1D轴值始终为0的问题
核心问题排查与修正
1. 确认Player Input组件的消息传递设置
OnMovement方法无法被正确调用是值始终为0的常见原因:
- 选中挂载Player Input的GameObject,在Inspector面板中:
- 将Behavior设置为
Send Messages,Unity会自动识别并调用以On[动作名称]命名的方法(比如动作名为Movement时,自动调用OnMovement)。 - 若选择
Invoke Unity Events,需手动在Player Input的Events列表中,将Movement动作绑定到脚本的OnMovement方法。
- 将Behavior设置为
2. 修正输入动作与脚本逻辑的匹配问题
你当前用同一个Movement动作控制两个 paddle,逻辑不符合需求且存在冗余,建议拆分输入动作:
- 在Input Action Asset中创建两个独立的1D轴动作:
LeftMovement:绑定W(正方向)、S(负方向)RightMovement:绑定↑(正方向)、↓(负方向)
- 修改脚本,为每个动作添加对应回调:
using UnityEngine; using UnityEngine.InputSystem; public class PaddleBehaviour : MonoBehaviour { public GameObject leftPaddle; public GameObject rightPaddle; private float _leftMoveValue; private float _rightMoveValue; public int moveSpeed = 10; void Update() { leftPaddle.transform.Translate(Vector3.up * _leftMoveValue * moveSpeed * Time.deltaTime); rightPaddle.transform.Translate(Vector3.up * _rightMoveValue * moveSpeed * Time.deltaTime); } // 左 paddle 输入回调 void OnLeftMovement(InputValue value) { _leftMoveValue = value.Get<float>(); } // 右 paddle 输入回调 void OnRightMovement(InputValue value) { _rightMoveValue = value.Get<float>(); } }
3. 其他低级错误检查
- 确保脚本已挂载到Player Input组件所在的GameObject上。
- 确认Input Action Asset中的
LeftMovement和RightMovement动作已启用(勾选动作名称旁的复选框)。 - 检查按键绑定正确性:在Input Action Asset的绑定界面,点击绑定项并按下对应按键,确认输入值在Debug面板中正常变化。
内容的提问来源于stack exchange,提问作者FinnM
相关产品推荐
相关产品推荐

