Unity 5: Прыжки в 2D игре — Урок 9

Подготовка к реализации прыжков

Для реализации прыжков главного кубика на другие объекты (блоки) необходимо добавить компоненты Rigidbody и Box Collider к соответствующим игровым объектам.

  • Rigidbody для главного кубика: Добавление этого компонента к главному кубику (Main Cube) позволяет применять к нему физические законы. В скрипте CubeToBlock это осуществляется строкой кода mcbe.AddComponent<Rigidbody>();. Это гарантирует добавление компонента после завершения всех анимаций.
  • Box Collider для блоков: Каждый блок должен иметь компонент Box Collider, определяющий его форму как твердое тело для физического взаимодействия.

Проверка работоспособности Rigidbody: после добавления компонента Rigidbody кубик должен падать под действием гравитации. Отключение параметра Use Gravity в компоненте Rigidbody предотвращает падение.

Скрипт для прыжков (CubeJump)

Создадим скрипт CubeJump в папке Game. Он будет управлять механикой прыжков, реагируя на события нажатия и отпускания мыши (OnMouseDown, OnMouseUp).

Переменные и функции

В скрипте CubeJump используются следующие переменные:

  • Main Cube: ссылка на главный кубик.
  • Animate: булева переменная, указывающая на состояние анимации сжатия/растяжения кубика (симуляция пружины).
  • ScratchSpeed: скорость сжатия/растяжения кубика.
  • StartTime: время начала нажатия на экран.
  • Force: сила прыжка, зависящая от времени удержания нажатия.
  • YPositionCube: Y-координата кубика, используемая для определения столкновения с блоком.
  • GameWon: булева переменная, указывающая на выигрыш.
  • GameLost: булева переменная, указывающая на проигрыш.
  • NextBlock: булева переменная, означающая попадание на новый блок.

Функции скрипта:

  • OnMouseDown: записывает время начала нажатия (StartTime) и устанавливает Animate в true.
  • OnMouseUp: рассчитывает силу прыжка (Force) на основе времени удержания нажатия и вызывает функцию Jump.
  • FixedUpdate: отвечает за анимацию сжатия/растяжения кубика, используя Animate и ScratchSpeed, и управляет логикой прыжка и проверки попадания на новую платформу.
  • PressCube: функция сжатия/растяжения кубика с заданной силой.
  • CheckYPosition: корутина, проверяющая позицию кубика по Y-координате через определенное время после прыжка, определяя попадание на тот же или новый блок.

Логика прыжка

Сила прыжка (Force) рассчитывается по времени удержания нажатия. AddRelativeForce добавляет силу к Rigidbody кубика. Направление прыжка задается векторами transform.up (вверх) и transform.right (влево или вправо).

Управление размером блоков

В скрипте SpawnBlocks функция RandScale генерирует случайный размер для создаваемых блоков, добавляя сложность в игру.

Определение попадания на новый блок

Скрипт проверяет состояние покоя кубика (IsSleeping) после прыжка, чтобы определить попадание на новую платформу. При попадании позиция кубика корректируется для центрирования на новом блоке, а его вращение выравнивается.

Условие проигрыша и удаление кубика

Если кубик опускается ниже определенной точки по Y-координате, он уничтожается (Destroy), и объявляется проигрыш (Player Lose).

Дополнительные проверки и оптимизации

Добавлены проверки для предотвращения обращения к уничтоженному кубику и для предотвращения прыжка после проигрыша. Используется StartCoroutine для запуска корутин.

Выполнив описанные шаги, вы реализуете прыжки главного кубика на другие блоки, добавив динамику и сложность в игру. Прыжки реализованы с использованием физики Unity и пользовательского скрипта, управляющего анимацией и логикой прыжков.

Что будем искать? Например,программа