Unity 3D玩家前后移动实现求助:已完成左右移动功能
解决Unity玩家前后移动失效问题
你的代码里,前后移动失效的核心原因是给Rigidbody赋值velocity时,z轴被固定为0,完全没用到读取到的verticalInput变量。以下是修改后的代码,同时优化了性能和移动体验:
// 新增移动速度变量,可在Inspector面板调整 public float moveSpeed = 5f; private Rigidbody rb; private float horizontalInput; private float verticalInput; private bool jump; void Start() { // 缓存Rigidbody组件,避免重复调用GetComponent rb = GetComponent<Rigidbody>(); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) { jump = true; } horizontalInput = Input.GetAxis("Horizontal"); verticalInput = Input.GetAxis("Vertical"); } private void FixedUpdate() { // 同时应用水平和垂直方向的输入,乘以移动速度控制幅度 rb.velocity = new Vector3(horizontalInput * moveSpeed, rb.velocity.y, verticalInput * moveSpeed); if (jump) { rb.AddForce(Vector3.up * 5, ForceMode.VelocityChange); jump = false; } }
关键修改说明
- 新增
moveSpeed公开变量,方便在Unity编辑器里调整移动快慢,不用改代码 - 缓存Rigidbody组件到
rb变量,避免每次FixedUpdate都调用GetComponent,提升性能 - 将velocity的z轴参数从
0改为verticalInput * moveSpeed,让前后方向的输入直接作用于玩家移动 - 移除了代码里多余的分号(原代码
verticalInput = Input.GetAxis("Vertical"); ;有两个分号)
内容的提问来源于stack exchange,提问作者Neeraj Manhas
相关产品推荐
相关产品推荐

