使用Unity Input System控制球体移动脚本失效问题排查
Unity Input System 球体移动失效问题排查
以下是导致脚本无法驱动球体移动的常见原因及解决方法:
输入回调方法命名错误
代码中的Onmove方法名首字母小写,不符合Input System的回调规则。Input System要求回调方法名必须首字母大写(如OnMove),否则无法触发输入事件。修正方法名即可解决绑定失效问题。输入动作未正确配置
- 确保已创建Input Actions资产,其中包含名为
Move的2D矢量动作,并绑定了WASD/方向键等输入设备; - 在球体的GameObject上添加
Player Input组件,选择Send Messages模式,将Move动作关联到PlayerController的OnMove方法。
- 确保已创建Input Actions资产,其中包含名为
刚体组件配置问题
检查球体是否挂载了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
相关产品推荐
相关产品推荐

