看着鼠标位置在世界空间中移动

时间:2019-07-28 13:10:43

标签: unity3d

我正在尝试使用WASD键移动播放器,同时始终查看鼠标的位置。 我的问题是,W键将始终将播放器移向鼠标位置,而我希望它继续使用世界空间移动。 这是移动播放器的代码。

private void FixedUpdate()
{ 
    MovementHandler();
    RotationHandler();
}

void MovementHandler()
{
    float hInput = Input.GetAxisRaw("Horizontal");
    float vInput = Input.GetAxisRaw("Vertical");
    float speed = Input.GetButton("Run") ? runSpeed : walkSpeed;

    Vector3 hMovement = characterController.isGrounded == true ? transform.forward * vInput : Vector3.zero;
    Vector3 vMovement = characterController.isGrounded == true ? transform.right * hInput : Vector3.zero;

    characterController.SimpleMove(Vector3.ClampMagnitude(hMovement +    vMovement, 1) * speed);
}

void RotationHandler()
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    if (Physics.Raycast(ray, out RaycastHit hit, 100, groundMask))
    {
        transform.LookAt(hit.point);
    }
}

谢谢。

1 个答案:

答案 0 :(得分:0)

您正在使用对象本地空间transform.forwardtransform.right

如果您想让世界空间轴运动,我想您应该使用Vector3.forwardVector3.right

var hMovement = characterController.isGrounded ? Vector3.forward * vInput : Vector3.zero;
var vMovement = characterController.isGrounded ? Vector3.right * hInput : Vector3.zero;

由于获取的是原始轴值,您可能应该将运动值乘以Time.deltaTime,以使代码帧速率独立!

或者直接使用已经包含GetAxis的{​​{1}}。