I need help making my player rotation smoother. Right now, whenever the camera is facing a different direction than the player is facing, if I press forward with the player controls, he snaps into the direction the camera is facing, rather than a smooth rotation. This is the code in the player:
if (Mathf.Abs(Input.GetAxis("Vertical")) + Mathf.Abs(Input.GetAxis("Horizontal")) > 0) {
// Rotate in the direction the pivot is facing
transform.rotation = Quaternion.Euler(0f, pivot.rotation.eulerAngles.y, 0f);
// Create a new rotation based on the direction the player is currently facing
Quaternion newRotation = Quaternion.LookRotation(new Vector3(moveDirection.z, 0, -moveDirection.x));
// Set the player model rotation to be in the direction of the new rotation
playerModel.transform.rotation = Quaternion.Slerp(playerModel.transform.rotation, newRotation, rotateSpeed * Time.deltaTime);
}
This is the code in the camera:
void LateUpdate()
{
if(!Cursor.visible) {
pivot.transform.parent = null;
pivot.transform.position = target.transform.position;
//Get X position of the mouse & rotate the target
float horizontal = Input.GetAxis("Mouse X") * rotateSpeedX;
pivot.Rotate(0, horizontal, 0);
//Get Y position of the mouse & rotate the pivot
float vertical = Input.GetAxis("Mouse Y") * rotateSpeedY;
//pivot.Rotate(-vertical,0 , 0);
if (invertY)
{
pivot.Rotate(vertical, 0, 0);
}
else
{
pivot.Rotate(-vertical, 0, 0);
}
float desiredYAngle = pivot.eulerAngles.y;
float desiredXAngle = pivot.eulerAngles.x;
//Limit up/down camera rotation
if (pivot.rotation.eulerAngles.x > maxViewAngle && pivot.rotation.eulerAngles.x < 180)
{
pivot.rotation = Quaternion.Euler(maxViewAngle, desiredYAngle, 0);//pivot.rotation.eulerAngles.y, pivot.rotation.eulerAngles.z);
}
if (pivot.rotation.eulerAngles.x > 180 && pivot.rotation.eulerAngles.x < 360 + minViewAngle)
{
pivot.rotation = Quaternion.Euler(360 + minViewAngle, desiredYAngle, 0);//pivot.rotation.eulerAngles.y, pivot.rotation.eulerAngles.z);
}
//Move camera based on current rotation of target
Quaternion rotation = Quaternion.Euler(desiredXAngle, desiredYAngle, 0);
transform.position = target.position - (rotation * offset);
if (transform.position.y < target.position.y)
{
transform.position = new Vector3(transform.position.x, target.position.y - 0.5f, transform.position.z);
}
transform.LookAt(target.transform);
}
}
↧