Perekyp/Assets/Scripts/Player/Movement/PlayerMovement.cs

42 lines
1.5 KiB
C#

using UnityEngine;
[RequireComponent(typeof(CharacterController))]
public class PlayerMovement : MonoBehaviour
{
[Header("Movement Settings")]
[SerializeField] private float moveSpeed = 4f;
[SerializeField] private float gravity = -9.81f;
[Header("Ground Check")]
[SerializeField] private Transform groundCheck;
[SerializeField] private float groundDistance = 0.4f;
[SerializeField] private LayerMask groundMask;
private CharacterController controller;
private Vector3 velocity;
private bool isGrounded;
private void Awake()
{
controller = GetComponent<CharacterController>();
}
public void ProcessMove(Vector2 input)
{
// Проверка касания земли (сфера на уровне ног)
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
if (isGrounded && velocity.y < 0)
{
velocity.y = -2f; // Небольшое прижатие к земле для стабильного спуска по склонам
}
// Движение относительно локальных координат игрока
Vector3 move = transform.right * input.x + transform.forward * input.y;
controller.Move(move * (moveSpeed * Time.deltaTime));
// Применение гравитации
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
}
}