我正在尝试使用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);
}
}
谢谢。
答案 0 :(得分:0)
您正在使用对象本地空间transform.forward
和transform.right
如果您想让世界空间轴运动,我想您应该使用Vector3.forward
和Vector3.right
var hMovement = characterController.isGrounded ? Vector3.forward * vInput : Vector3.zero;
var vMovement = characterController.isGrounded ? Vector3.right * hInput : Vector3.zero;
由于获取的是原始轴值,您可能应该将运动值乘以Time.deltaTime
,以使代码帧速率独立!
或者直接使用已经包含GetAxis
的{{1}}。