using UnityEngine;
public class PlayerController : MonoBehaviour
{
// Настройки персонажа, которые можно менять в Инспекторе
[Header("Настройки движения")]
[SerializeField] private float speed = 8f; // Скорость бега
[SerializeField] private float jumpForce = 12f; // Сила прыжка
// Переменные для хранения компонентов
private Rigidbody2D rb;
private bool isGrounded; // Стоит ли персонаж на земле
// Метод Start вызывается один раз в самом начале
void Start()
{
// Получаем ссылку на компонент Rigidbody2D, который мы добавили белочке
rb = GetComponent<Rigidbody2D>();
}
// Метод Update вызывается каждый кадр (здесь считываем нажатия клавиш)
void Update()
{
// 1. Считываем движение по горизонтали (A/D или стрелки)
// moveInput будет от -1 (влево) до 1 (вправо)
float moveInput = Input.GetAxis("Horizontal");
// Применяем скорость к Rigidbody. Сохраняем текущую скорость по вертикали (y).
rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);
// 2. Прыжок. Проверяем: нажата ли Кнопка "Прыжок" (Пробел) И стоит ли персонаж на земле
if (Input.GetButtonDown("Jump") && isGrounded)
{
// Применяем силу вверх (импульс)
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
}
}
// --- ФИЗИКА И СТОЛКНОВЕНИЯ ---
// Эти методы работают благодаря BoxCollider2D
// Вызывается, когда коллайдер белочки касается другого коллайдера
private void OnCollisionEnter2D(Collision2D collision)
{
// Проверяем, коснулись ли мы объекта с тегом "Ground"
if (collision.gameObject.CompareTag("Ground"))
{
isGrounded = true; // Мы на земле
}
}
// Вызывается, когда коллайдер белочки перестает касаться другого коллайдера
private void OnCollisionExit2D(Collision2D collision)
{
// Если мы перестали касаться земли
if (collision.gameObject.CompareTag("Ground"))
{
isGrounded = false; // Мы в воздухе
}
}
}