Содержание
- Краткое резюме
- Настройка проекта и создание игровых объектов 🎮
- Границы игрового поля и физика ⚡
- Скрипты управления мячом и ракетками 🖥️
- Система подсчёта очков и UI 📊
- Начало игры и управление экранами 🎬
- Поддержка мультисенсорного управления для Android 📱
- Сборка и публикация игры для Android 🎯
- Итоги и рекомендации 🏁
Краткое резюме
- Создаётся многопользовательская игра Pong для Android в Unity.
- Проект настраивается под разрешение iPhone 8, создаются игровые объекты: мяч, ракетки и границы с физическими коллайдерами.
- Добавляются физические материалы с нулевым трением и максимальной отдачей для реалистичных столкновений.
- Пишутся скрипты управления мячом и ракетками с плавным движением и ограничениями по границам экрана.
- Реализуется система подсчёта очков с UI-элементами, стартовый и экран окончания игры с кнопками для управления игрой.
- Добавляется поддержка сенсорного управления для Android с разделением управления двумя ракетками по положению касания.
- Описан процесс сборки APK и публикации игры в Google Play Store.
Настройка проекта и создание игровых объектов 🎮
Для начала создаётся новый 2D-проект Unity, нацеленный на Android, с установкой SDK, NDK и JDK. В проекте устанавливается разрешение под iPhone 8 (1334×750) для оптимального отображения игры.
Фон меняется с синего на серый, создаётся папка sprites
для хранения игровых ассетов. В качестве игровых объектов используются стандартные формы: круг (мяч) и квадрат (ракетка), чтобы не создавать собственную графику.
Ракетка собирается из трёх частей: верхний и нижний "концы" (круги) и центральная часть (квадрат), которые размещаются и масштабируются так, чтобы напоминать классическую ракетку Pong. Все части ракетки объединяются в пустой игровой объект для удобства управления.
Границы игрового поля и физика ⚡
Для ограничения движения мяча создаются четыре границы: слева, справа, сверху и снизу. Каждая граница — это пустой объект с добавленным 2D коллайдером BoxCollider2D
, расположенным сразу за краем камеры.
На мяч добавляется CircleCollider2D
и RigidBody2D
для физической симуляции. Для ракеток также добавляется RigidBody2D
(с режимом Kinematic
для управления через скрипт) и CapsuleCollider2D
, покрывающий всю длину ракетки с небольшим запасом, чтобы игроку не мешали мелкие неточности попаданий.
Создаётся материал с нулевым трением и максимальной упругостью (bounciness = 1), который применяется ко всему: к мячу, ракеткам и стенам. Это обеспечивает эффективный отскок мяча без замедления.
«Материал с нулевым трением и максимальной упругостью гарантирует, что мяч отскакивает, не теряя скорость.»
Скрипты управления мячом и ракетками 🖥️
Скрипт BallController
:
- Содержит настройки силы импульса (thrust), задаёт направление и движение мяча через добавление силы в
RigidBody2D
. - При старте мяча сила параметризуется в редакторе (например, 50) и применяется в случайном направлении (гарантируется случайность, мяч не всегда идёт в одну сторону).
Скрипт PaddleController
:
- Управляет движением ракетки только по оси Y.
- Использует плавную интерполяцию позиции (Lerp), чтобы движение не было резким.
- Добавлено ограничение позиции (clamp), чтобы ракетка не выходила за пределы видимой области.
- Позиция ракетки обновляется каждый кадр в методе Update.
Для второй ракетки достаточно продублировать первую и инвертировать координату по X, чтобы расположить ее с другой стороны экрана.
Система подсчёта очков и UI 📊
Создается канвас с экранным пространством, который "привязывается" к камере для стабильного отображения UI в любой конфигурации. На канвасе добавляются:
- Текстовые объекты для отображения очков игроков, расположенные слева и справа вверху.
- Игровая логика увеличивает счет при столкновении мяча с краями игрового поля за ракеткой соперника (
OnCollisionEnter2D
в скриптеScoreZone
). - При наборе 7 очков появляется экран окончания игры с кнопкой перезапуска.
Обновление текста происходит через изменение значения в UI Text, привязанном к переменной в скрипте.
«Очки растут при попадании мяча за ракетку соперника — это простая и понятная механика подсчёта.»
Начало игры и управление экранами 🎬
Для запуска игры создается стартовый экран с чёрным фоном и кнопкой "Play", которая:
- Скрывает стартовый экран.
- Включает мяч (который изначально выключен, чтобы не начинать движение сразу).
Экран окончания игры (Game Over):
- Полупрозрачный, чтобы видны были текущие очки и объекты.
- С кнопкой рестарта, которая через отдельный скрипт перезагружает сцену.
- Активируется при достижении одного из игроков 7 очков.
Для корректного отображения UI в разных разрешениях все элементы привязываются (anchored) к нужным углам экрана, что предотвращает "прыжки" объектов при смене разрешения.
Поддержка мультисенсорного управления для Android 📱
После переключения платформы на Android подключается поддержка сенсорного управления:
- Вместо мыши читается массив касаний.
- Для каждой ракетки проверяется касание, попадающее в её область слева или справа.
- Если касание находится в зоне одной из ракеток, двигается именно она.
- Это позволяет двум игрокам управлять своими ракетками одновременно с одного устройства.
«Два игрока могут одновременно управлять ракетками по обеим сторонам экрана, что идеально для Android-устройств.»
Сборка и публикация игры для Android 🎯
Для сборки играет важную роль правильная настройка в Player Settings
:
- Вводятся данные компании, версия, иконки.
- Фиксируется ориентировка экрана — выключаются портретные режимы, игра всегда в ландшафтной ориентации.
В Build Settings
добавляется основная сцена, после чего создаётся APK или AAB:
- APK можно установить вручную на устройство.
- AAB нужен для публикации в Google Play Store.
В процессе разработки можно использовать приложение Unity Remote для тестирования касаний и управления прямо на смартфоне, не создавая полный билд.
Итоги и рекомендации 🏁
В данном уроке показан полный цикл создания мультиплеерной игры Pong под Android на Unity — от создания и настройки сцены до обработки ввода и UI. Все ключевые элементы взаимосвязаны и структурированы для легкого понимания и масштабирования:
- Чистая организация папок и объектов.
- Использование физических материалов для реалистичных столкновений.
- Плавное управление и ограничение движения ракеток.
- UI с подсчетом очков и экранами начала и окончания игры.
- Поддержка мультисенсорного управления для двух игроков.
- Подготовка финального билда и его публикация.
«Теперь у вас есть полностью функциональная игра Pong для Android, готовая к игре с друзьями или публикации в Google Play.»
🔥 Удачи в разработке и улучшении вашей игры!