Unity Simple First Person Camera Controller

PHOTO EMBED

Fri Mar 18 2022 15:53:16 GMT+0000 (Coordinated Universal Time)

Saved by @BryanJ22

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SimpleCameraRotate : MonoBehaviour
{
    public float MouseSensitivity = 100;
    public GameObject Player;
    private float xRotation = 0f;
    private bool slideLooking = false;

    public void CameraUpdate(bool sliding)
    {
        //Get Mouse X and Y inputs
        float mouseX = Input.GetAxis("Mouse X") * MouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * MouseSensitivity * Time.deltaTime;

        //set xRotation and clamp it so player can't look directly up or down
        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -75f, 75f);

        //Set normal camera rotations and rotations for when the player is sliding
        Vector3 slideRotations = new Vector3(xRotation - 8, 0f, 0f);
        Vector3 rotations = new Vector3(xRotation, mouseX, 0f);

        float camXRot = 0;

        //If the player is sliding (Holding shift and their speed is > 6) the camera should rotate up a little to give a sliding effect
        if (sliding)
        {
            slideLooking = true;
            camXRot = Quaternion.Slerp(this.transform.localRotation, Quaternion.Euler(slideRotations), 7 * Time.deltaTime).eulerAngles.x;
        }

        //If the player is no longer sliding, we need to rotate the camera back
        else
        {
            //We will lerp the camera until it's almost at its destination, and then we will stop
            if (slideLooking)
            {
                camXRot = Quaternion.Slerp(this.transform.localRotation, Quaternion.Euler(rotations), 7 * Time.deltaTime).eulerAngles.x;

                if (Mathf.Abs(this.transform.localRotation.eulerAngles.x - camXRot) < .001f)
                {
                    slideLooking = false;
                }
            }

            //once we stop lerping the camera, it wil be moved only based on the mouse position again
            else
            {
                camXRot = xRotation;
            }
        }

        this.transform.localRotation = Quaternion.Euler(camXRot, 0f, 0f);
        Player.transform.Rotate(Player.transform.up * mouseX);
    }
}
content_copyCOPY