Last active
January 20, 2023 03:36
-
-
Save deadasadodo/f1586aa15f9b020abd332784cbb96832 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//made by deadasadodo101 | |
using UnityEngine; | |
[RequireComponent(typeof(CharacterController))] | |
public class SC_HeadBobber : MonoBehaviour | |
{ | |
public float speed = 7.5f; | |
public float jumpSpeed = 8.0f; | |
public float gravity = 20.0f; | |
public Camera playerCamera; | |
public float lookSpeed = 2.0f; | |
public float lookXLimit = 45.0f; | |
CharacterController characterController; | |
[HideInInspector] | |
public Vector3 moveDirection = Vector3.zero; | |
Vector2 rotation = Vector2.zero; | |
[HideInInspector] | |
public bool canMove = true; | |
void Start() | |
{ | |
characterController = GetComponent<CharacterController>(); | |
rotation.y = transform.eulerAngles.y; | |
} | |
void Update() | |
{ | |
if (characterController.isGrounded) | |
{ | |
// We are grounded, so recalculate move direction based on axes | |
Vector3 forward = transform.TransformDirection(Vector3.forward); | |
Vector3 right = transform.TransformDirection(Vector3.right); | |
float curSpeedX = canMove ? speed * Input.GetAxis("Vertical") : 0; | |
float curSpeedY = canMove ? speed * Input.GetAxis("Horizontal") : 0; | |
moveDirection = (forward * curSpeedX) + (right * curSpeedY); | |
if (Input.GetButton("Jump") && canMove) | |
{ | |
moveDirection.y = jumpSpeed; | |
} | |
} | |
// Apply gravity. Gravity is multiplied by deltaTime twice (once here, and once below | |
// when the moveDirection is multiplied by deltaTime). This is because gravity should be applied | |
// as an acceleration (ms^-2) | |
moveDirection.y -= gravity * Time.deltaTime; | |
// Move the controller | |
characterController.Move(moveDirection * Time.deltaTime); | |
// Player and Camera rotation | |
if (canMove) | |
{ | |
rotation.y += Input.GetAxis("Mouse X") * lookSpeed; | |
rotation.x += -Input.GetAxis("Mouse Y") * lookSpeed; | |
rotation.x = Mathf.Clamp(rotation.x, -lookXLimit, lookXLimit); | |
playerCamera.transform.localRotation = Quaternion.Euler(rotation.x, 0, 0); | |
transform.eulerAngles = new Vector2(0, rotation.y); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment