unity3d 为什么当我转身时,我的球员移动是反向的?

6rqinv9w  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(220)

我经常使用刚体,最近开始使用角色控制器。我在这里有角色控制器的基本运动代码:

public void Update()
    {
        isGrounded = controller.isGrounded;
if (isGrounded)
        {
            x = Input.GetAxis("Horizontal");
            z = Input.GetAxis("Vertical");
        }
        Vector3 move = Vector3.forward * z + Vector3.right * x;
        controller.Move(move * speed * Time.deltaTime);

        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
        }

        if (!isGrounded)
        {
        }

        velocity.y += gravity * Time.deltaTime; // Gravity for jumps

        controller.Move(velocity * Time.deltaTime);
    }

我之所以使用这段代码是因为我想确保当我的玩家跳跃时,跳跃不会跟随我的摄像机,这段代码做到了,但是如果我在y轴上旋转180度,我的WASD键都颠倒了。我试过加 *(1)但那只是让事情变得更糟。如果我把Vector3.Forward & Vector3.Right替换为Transform.Forward & Transform.Right,键不再反转但之后我的跳跃由我的鼠标移动控制,所以我真的在努力让第一行代码工作。

3lxsmp7m

3lxsmp7m1#

Vector3.forward始终为(1,0,0)。如果希望移动基于摄影机的旋转,则需要使用Transform.forwardTransform.right(假设角色仅绕y轴旋转)
如果你不想让跳跃在半空中是可控的,你就必须用逻辑来创造动量,防止玩家在空中改变动量,第一条线永远不会起作用。

相关问题