【发布时间】:2018-09-30 05:41:41
【问题描述】:
我创建了一个 FPS 动作,但玩家的动作是错误的。向左或向右旋转时,玩家仍会向前移动。
PlayerMovement.cs
public class PlayerMovement : MonoBehaviour
{
private Vector3 movement;
private Rigidbody rigid;
private bool jumpPressed;
private const int MOVEMENT_SPEED = 8;
private const int JUMP_POWER = 20;
private void Awake()
{
rigid = GetComponent<Rigidbody>();
}
private void Update()
{
SetInputs();
}
private void FixedUpdate()
{
Jump();
Move();
}
private void SetInputs()
{
movement.x = Input.GetAxis("Horizontal") * MOVEMENT_SPEED;
movement.y = rigid.velocity.y;
movement.z = Input.GetAxis("Vertical") * MOVEMENT_SPEED;
jumpPressed = Input.GetKeyDown(KeyCode.Space);
}
private void Jump()
{
if (jumpPressed && GroundCheck())
{
movement.y = JUMP_POWER;
jumpPressed = false;
}
}
private void Move()
{
rigid.velocity = movement;
}
private bool GroundCheck()
{
return true;
}
}
CameraMovement.cs
public class CameraMovement : MonoBehaviour
{
private Transform player;
private Vector2 rotation;
private Quaternion originalRotation;
private const int HORIZONTAL_ROTATION_SPEED = 5;
private const int VERTICAL_ROTATION_SPEED = 5;
private const int VERTICAL_ROTATION_MIN = -80;
private const int VERTICAL_ROTATION_MAX = 80;
private void Awake()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
}
private void Start()
{
originalRotation = transform.localRotation;
}
private void Update()
{
SetInputs();
RotateCamera();
RotatePlayer();
}
private void SetInputs()
{
rotation.x = Input.GetAxisRaw("Mouse X") * HORIZONTAL_ROTATION_SPEED;
rotation.y += Input.GetAxisRaw("Mouse Y") * VERTICAL_ROTATION_SPEED;
rotation.y = Mathf.Clamp(rotation.y, VERTICAL_ROTATION_MIN, VERTICAL_ROTATION_MAX);
}
private void RotateCamera()
{
Quaternion verticalRotation = Quaternion.AngleAxis(rotation.y, Vector3.left);
transform.localRotation = originalRotation * verticalRotation;
}
private void RotatePlayer()
{
player.localRotation *= Quaternion.AngleAxis(rotation.x, player.up);
}
}
我提供了一个小 gif,显示旋转时的错误动作。
https://media.giphy.com/media/2jMy38g1PjckODc6B0/giphy.gif
当通过旋转相机旋转播放器时,播放器会围绕其 y 轴正确旋转。不知怎的,他并没有朝着他所面对的方向前进,他只是沿着一个方向前进。
需要解决什么问题?
【问题讨论】: