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

如何让玩家对象旋转不影响Input.GetAxisRaw("Horizontal")输入?

问题解决:让Unity输入不受玩家旋转影响

你的问题根源在于移动方向是基于玩家本地空间坐标轴计算的——transform.right和transform.forward会跟着玩家旋转一起改变,所以Input.GetAxisRaw("Horizontal")的输入方向也会跟着偏移。要让输入固定,改用世界空间坐标轴即可。

修改步骤:

  • 把移动方向计算里的transform.forward替换为Vector3.forward,transform.right替换为Vector3.right,这样输入对应的是世界空间的固定方向(比如Horizontal对应世界左右,Vertical对应世界前后),和玩家自身旋转无关。
  • 补上verticalMovement的输入读取逻辑,你原代码中未给该变量赋值,导致前后移动功能失效。

修改后的完整代码:

using UnityEngine;

public class JUSTMOVE : MonoBehaviour
{
    public float speed = 7f;
    Vector3 moveDirection;
    public Rigidbody rb;
    float horizontalMovement;
    float verticalMovement;
    public float movementMultiplier = 10f;
    bool grounded;
    public float groundDrag = 6;
    public LayerMask whatIsGround;
    public float airMultiplier = 3f;
    public float playerHeight = 2f;
    public float jumpForce = 5f;

    void FixedUpdate()
    {
        grounded = Physics.Raycast(transform.position, Vector3.down, playerHeight * 0.5f + 0.2f, whatIsGround);

        // 读取水平和垂直输入
        horizontalMovement = Input.GetAxisRaw("Horizontal");
        verticalMovement = Input.GetAxisRaw("Vertical"); // 补全输入读取

        rb.drag = grounded ? groundDrag : 0;

        // 改用世界空间坐标轴计算移动方向
        moveDirection = Vector3.forward * verticalMovement + Vector3.right * horizontalMovement;

        if (grounded)
        {
            rb.AddForce(moveDirection.normalized * speed * movementMultiplier, ForceMode.Force);
        }
        else
        {
            rb.AddForce(moveDirection.normalized * speed * movementMultiplier * airMultiplier, ForceMode.Force);
        }

        if (Input.GetKey("a"))
        {
            transform.localRotation = Quaternion.Euler(0, 270, 0);
        }

        Vector3 flatVel = new Vector3(rb.velocity.x, 0f, rb.velocity.z);
        if (flatVel.magnitude > speed)
        {
            Vector3 limitedVel = flatVel.normalized * speed;
            rb.velocity = new Vector3(limitedVel.x, rb.velocity.y, limitedVel.z);
        }

        if (Input.GetKey("w") && grounded)
        {
            rb.velocity = new Vector3(rb.velocity.x, 0f, rb.velocity.z);
            rb.AddForce(transform.up * jumpForce, ForceMode.Impulse);
        }
    }
}

修改完成后,无论你用Input.GetKey("a")将玩家转到什么角度,Input.GetAxisRaw的输入都会对应世界固定方向,不会再随玩家旋转偏移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:39:25