C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Move : MonoBehaviour
{
public float walkSpeed = 5f;
public float runSpeed = 10f;
public float jumpForce = 5f;
public float mouseSensitivity = 2f;
private float currentSpeed;
private float xRotation = 0f;
private CharacterController controller;
private Vector3 moveDirection = Vector3.zero;
private bool isJumping = false;
private bool isCrouching = false;
private void Start()
{
controller = GetComponent<CharacterController>();
Cursor.lockState = CursorLockMode.Locked;
currentSpeed = walkSpeed;
}
private void Update()
{
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;
transform.Rotate(Vector3.up * mouseX);
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 90f);
Camera.main.transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
bool isRunning = Input.GetKey(KeyCode.LeftShift);
bool isCrouchButtonPressed = Input.GetKey(KeyCode.C);
if (isCrouchButtonPressed && !isCrouching)
{
isCrouching = true;
controller.height /= 2f;
}
else if (!isCrouchButtonPressed && isCrouching)
{
isCrouching = false;
controller.height *= 2f;
}
currentSpeed = isRunning && !isCrouching ? runSpeed : walkSpeed;
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
if (controller.isGrounded)
{
moveDirection = transform.right * horizontalInput + transform.forward * verticalInput;
moveDirection *= currentSpeed;
if (Input.GetButtonDown("Jump"))
{
moveDirection.y = jumpForce;
isJumping = true;
}
}
moveDirection.y -= 9.8f * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
if (controller.isGrounded && isJumping)
{
isJumping = false;
}
}
}