using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
[Header("Настройки движения")]
[SerializeField] private float moveSpeed = 5f;
[SerializeField] private float runSpeed = 8f;
[SerializeField] private float jumpForce = 5f;
private Rigidbody rb;
private bool isGrounded;
private float currentSpeed;
void Start()
{
rb = GetComponent<Rigidbody>();
currentSpeed = moveSpeed;
}
void Update()
{
// Проверка бега (при нажатии shift)
if (Input.GetKey(KeyCode.LeftShift))
{
currentSpeed = runSpeed;
}
else
{
currentSpeed = moveSpeed;
}
// Получаем входные данные
float horizontalInput = Input.GetAxisRaw("Horizontal");
float verticalInput = Input.GetAxisRaw("Vertical");
// Создаем вектор движения
Vector3 movement = new Vector3(horizontalInput, 0f, verticalInput).normalized;
// Перемещаем персонажа
if (movement.magnitude >= 0.1f)
{
transform.Translate(movement * currentSpeed * Time.deltaTime, Space.World);
// Поворачиваем персонажа в направлении движения
transform.forward = movement;
}
// Прыжок
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
isGrounded = false;
}
}
void OnCollisionEnter(Collision collision)
{
// Проверяем, приземлился ли персонаж
if (collision.gameObject.CompareTag("Ground"))
{
isGrounded = true;
}
}
}