- Home /
My camera isn't rotating
Hi everyone,
So today I tried to fix an issue I had for a few weeks, where my FPS Controller would stutter. I found a solution which was to separate the camera from the player's rigidbody and make the camera follow it. However a new problem came up now, I modified my inital script and now I can't rotate the camera left and right, or at least it doesnt, because when I move my mouse left and right, the rotation of my player moves but not the camera. Here is the code if you don't mind checking it out :
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Movement : MonoBehaviour { //movement related variables public float playerSpeed; public float maxSpeed = 10; public float minSpeed = 5f; private Rigidbody rb; [SerializeField] AudioSource steps; float x, y, movementX, movementY; public Transform playerPos;
//camera related variables
public float sensitivity;
public Transform playerCamera;
float limit;
//jumping related variables
public float jumpPower;
private bool shouldJump;
public Rigidbody body;
public bool isGrounded;
private void Awake()
{
rb = GetComponent<Rigidbody>();
}
private void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
private void Update()
{
Steps();
PlayerInput();
Camera();
JumpCheck();
}
private void FixedUpdate()
{
//speed limit
if (rb.velocity.magnitude >= maxSpeed)
{
return;
}
//walk
if (Input.GetKey(KeyCode.LeftShift))
{
if (rb.velocity.magnitude >= minSpeed)
{
return;
}
}
else
{
if (rb.velocity.magnitude >= maxSpeed)
{
return;
}
}
//vertical and horizontal movement
rb.AddForce(transform.right * x * playerSpeed);
rb.AddForce(transform.forward * y * playerSpeed);
//jumping
if (shouldJump && isGrounded)
{
body.AddForce(jumpPower * Vector3.up);
shouldJump = false;
}
}
void PlayerInput()
{
//movement input
x = Input.GetAxisRaw("Horizontal");
y = Input.GetAxisRaw("Vertical");
//camera input
movementX = Input.GetAxis("Mouse X") * sensitivity;
movementY = Input.GetAxis("Mouse Y") * -sensitivity;
}
void Steps()
{
if (Input.GetKey(KeyCode.Z) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.Q) || Input.GetKey(KeyCode.D))
{
if (!steps.isPlaying)
{
steps.Play();
}
}
else
{
steps.Pause();
}
}
void Camera()
{
limit -= movementY;
limit = Mathf.Clamp(limit, -90f, 90f);
transform.Rotate(0, movementX, 0);
playerCamera.transform.localRotation = Quaternion.Euler(-limit, 0, 0);
}
void JumpCheck()
{
Ray ray = new Ray(transform.position, -transform.up);
if (Physics.Raycast(transform.position, -transform.up, out RaycastHit hitInfo, 1f))
{
isGrounded = true;
Debug.DrawRay(transform.position, -transform.up, Color.green);
}
else
{
isGrounded = false;
Debug.DrawRay(transform.position, -transform.up, Color.red);
}
if (shouldJump == false)
{
shouldJump = Input.GetKeyDown(KeyCode.Space);
}
}
}
Thanks in advance, Draav.
Your answer
Follow this Question
Related Questions
Whats up with degrees on the Camera? 0 Answers
rotation along the y-axis with damping not working! 0 Answers
How to rotate Camera with Arrow Keys 0 Answers
How to rotate camera on sine wave. 0 Answers
Ship rotate to look at over time 1 Answer