Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

dont mind me...

using UnityEngine;

public class PlayerController : MonoBehaviour

{

    [SerializeField] Transform playerCamera = null;

    [SerializeField] float mouseSensitivity = 3.5f;

    [SerializeField] float walkSpeed = 10.0f;

    [SerializeField] float runSpeed = 12.0f;

    [SerializeField] float gravity = 9.81f;

    [SerializeField] bool lockCursor = true;

    [SerializeField] float jumpHeight = 3f;

    CharacterController controller = null;

    Vector2 currentDir = Vector2.zero;

    Vector2 currentDirVelocity = Vector2.zero;

    Vector2 currentMouseDelta = Vector2.zero;

    Vector2 currentMouseDeltaVelocity = Vector2.zero;

    float cameraPitch = 0.0f;

    float velocityY = 0.0f;

    void Start()

    {

        controller = GetComponent<CharacterController>();

        if (lockCursor)

        {

            Cursor.lockState = CursorLockMode.Locked;

            Cursor.visible = false;

        }

    }

    void Update()

    {

        UpdateMouseLook();

        UpdateMovement();

    }

    void UpdateMouseLook()

    {

        Vector2 targetMouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));

        currentMouseDelta = Vector2.SmoothDamp(currentMouseDelta, targetMouseDelta, ref currentMouseDeltaVelocity, 0.03f);

        cameraPitch -= currentMouseDelta.y * mouseSensitivity;

        cameraPitch = Mathf.Clamp(cameraPitch, -90.0f, 90.0f);

        playerCamera.localEulerAngles = Vector3.right * cameraPitch;

        transform.Rotate(Vector3.up * currentMouseDelta.x * mouseSensitivity);

    }

    void UpdateMovement()

    {

        Vector2 targetDir = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));

        targetDir.Normalize();

        currentDir = Vector2.SmoothDamp(currentDir, targetDir, ref currentDirVelocity, 0.3f);

        if (controller.isGrounded)

            velocityY = 0.0f;

        velocityY += gravity * Time.deltaTime;

        Vector3 velocity = (transform.forward * currentDir.y + transform.right * currentDir.x) * walkSpeed + Vector3.up * velocityY;

        controller.Move(velocity * Time.deltaTime);

        if ((Input.GetKey("left shift") || Input.GetKey("right shift")) && controller.isGrounded && !Input.GetKey(KeyCode.S) && !Input.GetKey(KeyCode.DownArrow))

        {

            velocity = (transform.forward * currentDir.y + transform.right * currentDir.x) * runSpeed + Vector3.up * velocityY;

            controller.Move(velocity * Time.deltaTime);

        }

        if (Input.GetKeyDown(KeyCode.J) && controller.isGrounded)

        {

            Debug.Log("Now Jumping!!");

            velocityY = Mathf.Sqrt(jumpHeight * -2f * gravity);

        }

    }

}

Support this post

Did you like this post? Tell us

Leave a comment

Log in with your itch.io account to leave a comment.