forked from BilalY/Rasagar
85 lines
2.2 KiB
C#
85 lines
2.2 KiB
C#
|
using UnityEngine;
|
||
|
using Cursor = UnityEngine.Cursor;
|
||
|
|
||
|
[RequireComponent(typeof(CharacterController))]
|
||
|
public class FirstPersonController : MonoBehaviour
|
||
|
{
|
||
|
[SerializeField]
|
||
|
private float m_MouseSensitivity = 100f;
|
||
|
[SerializeField]
|
||
|
private float m_MovementSpeed = 5f;
|
||
|
[SerializeField]
|
||
|
private Transform m_PlayerCamera = null;
|
||
|
[SerializeField]
|
||
|
private bool m_MoveWithMouse = true;
|
||
|
|
||
|
private CharacterController m_CharacterController;
|
||
|
private float m_XRotation = 0f;
|
||
|
[SerializeField]
|
||
|
private byte m_ButtonMovementFlags;
|
||
|
|
||
|
void Start()
|
||
|
{
|
||
|
#if ENABLE_INPUT_SYSTEM
|
||
|
Debug.Log("The FirstPersonController uses the legacy input system. Please set it in Project Settings");
|
||
|
m_MoveWithMouse = false;
|
||
|
#endif
|
||
|
if (m_MoveWithMouse)
|
||
|
{
|
||
|
Cursor.lockState = CursorLockMode.Locked;
|
||
|
}
|
||
|
m_CharacterController = GetComponent<CharacterController>();
|
||
|
}
|
||
|
|
||
|
void Update()
|
||
|
{
|
||
|
Look();
|
||
|
Move();
|
||
|
}
|
||
|
|
||
|
private void Look()
|
||
|
{
|
||
|
Vector2 lookInput = GetLookInput();
|
||
|
|
||
|
m_XRotation -= lookInput.y;
|
||
|
m_XRotation = Mathf.Clamp(m_XRotation, -90f, 90f);
|
||
|
|
||
|
m_PlayerCamera.localRotation = Quaternion.Euler(m_XRotation, 0, 0);
|
||
|
transform.Rotate(Vector3.up * lookInput.x, Space.World);
|
||
|
}
|
||
|
|
||
|
private void Move()
|
||
|
{
|
||
|
Vector3 movementInput = GetMovementInput();
|
||
|
|
||
|
Vector3 move = transform.right * movementInput.x + transform.forward * movementInput.z;
|
||
|
|
||
|
m_CharacterController.Move(move * m_MovementSpeed * Time.deltaTime);
|
||
|
}
|
||
|
|
||
|
private Vector2 GetLookInput()
|
||
|
{
|
||
|
float mouseX = 0;
|
||
|
float mouseY = 0;
|
||
|
if (m_MoveWithMouse)
|
||
|
{
|
||
|
mouseX = Input.GetAxis("Mouse X") * m_MouseSensitivity * Time.deltaTime;
|
||
|
mouseY = Input.GetAxis("Mouse Y") * m_MouseSensitivity * Time.deltaTime;
|
||
|
}
|
||
|
return new Vector2(mouseX, mouseY);
|
||
|
}
|
||
|
|
||
|
private Vector3 GetMovementInput()
|
||
|
{
|
||
|
float x = 0;
|
||
|
float z = 0;
|
||
|
if (m_MoveWithMouse)
|
||
|
{
|
||
|
x = Input.GetAxis("Horizontal");
|
||
|
z = Input.GetAxis("Vertical");
|
||
|
}
|
||
|
|
||
|
return new Vector3(x, 0, z);
|
||
|
}
|
||
|
}
|