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

使用Unity Input System控制球体移动脚本失效问题排查

Unity Input System 球体移动失效问题排查

以下是导致脚本无法驱动球体移动的常见原因及解决方法:

  • 输入回调方法命名错误
    代码中的Onmove方法名首字母小写,不符合Input System的回调规则。Input System要求回调方法名必须首字母大写(如OnMove),否则无法触发输入事件。修正方法名即可解决绑定失效问题。

  • 输入动作未正确配置

    1. 确保已创建Input Actions资产,其中包含名为Move的2D矢量动作,并绑定了WASD/方向键等输入设备;
    2. 在球体的GameObject上添加Player Input组件,选择Send Messages模式,将Move动作关联到PlayerController的OnMove方法。
  • 刚体组件配置问题
    检查球体是否挂载了Rigidbody组件:

    • 确认Use Gravity选项已开启;
    • 检查Rigidbody的Constraints设置,确保X、Z轴位置未被冻结。
  • 移动力度不足
    原代码中直接添加的力太小,可能导致移动效果不明显。可以添加一个速度系数,增强移动力度:
    定义public float speed = 15f;,然后在FixedUpdate中使用rb.AddForce(movement * speed)。

  • 包导入与版本兼容
    确认已通过Package Manager导入Unity Input System包,且Unity版本与Input System版本无兼容性冲突。


修正后的完整代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    private Rigidbody rb;
    private float movementX;
    private float movementY;
    public float speed = 15f; // 可在Inspector中调整移动速度

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    // 修正方法名大小写,符合Input System回调规则
    void OnMove(InputValue movementValue)
    {
        Vector2 movementVector = movementValue.Get<Vector2>();
        movementX = movementVector.x;
        movementY = movementVector.y;
    }

    void FixedUpdate()
    {
        Vector3 movement = new Vector3(movementX, 0.0f, movementY);
        rb.AddForce(movement * speed);
    }
}

内容的提问来源于stack exchange,提问作者SimonJN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:45:41