You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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方法。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:25:53