Hyper Casual игра на Unity с нуля. #2 Первый уровень
Первая часть: Hyper Casual игра на Unity с нуля. #1 Начало
Репозиторий: github.com/sergeychemodanov/roller-splat
Уровень будет состоять из ячеек - пустых (пол, который нужно закрасить) и стен. Первым делом создадим enum с этими типами.
_/Scripts/Dynamic/CellType.cs:
Затем создадим класс Level, в котором будет информация об ячейках и стартовой позиции шара.
_/Scripts/Dynamic/Level.cs:
Далее создадим класс, который будет хранить все динамические данные игры (пока что только информацию об уровнях), но сделаем его через интерфейс. Это позволит в дальнейшем легко подменить класс и, например, загружать данные с сервера.
_/Scripts/Dynamic/DataProviders/IDynamicDataProvider.cs:
Создадим тестового провайдера. Добавим в него один уровень 5x5 со стартовой позицией шара снизу слева.
_/Scripts/Dynamic/DataProviders/DebugDynamicDataProvider.cs:
Также необходимо создать класс для ячеек, которые будут находиться на сцене. Добавим в него метод Initialize, который принимает индекс ячейки и устанавливает позицию объекта в соответствии с индексом.
_/Scripts/Gameplay/Cell.cs:
Теперь создадим префабы пола, стены и шара и поместим их в папку _/Resources/Gameplay.
При создании удаляем с объектов коллайдеры, потому что мы не будем использовать физику и они нам ни к чему.
Создаем класс LevelFactory, который будет отвечать за создание объектов. В нем два метода: создать шар и создать ячейку.
_/Scripts/Gameplay/LevelFactory.cs:
Далее создаем класс GameController, который будет управлять игрой. Пока что в нем один метод Play, в который передается необходимый уровень. Контроллер берет данные уровня и создает необходимое количество ячеек и шар с помощью LevelFactory.
_/Scripts/Gameplay/GameController.cs:
Добавляем ссылки на GameController и DynamicDataProvider в класс App. Теперь он имеет вид:
Добавляем кнопку в класс MainMenuWindow, подписываемся на ее событие "Click". При нажатии берем первый уровень из списка уровней, передаем его GameController и закрываем окно.
Аттрибут [SerializeField] позволяет редактировать приватные переменные из редактора.
Далее нужно эту кнопку добавить в префаб окна. Я скачал SVG иконку кнопки play (256х256) с flaticon.com, закинул ее в figma.com, изменил цвет заливки на белый и сделал экспорт в PNG.
PNG картинку кладем в папку _/Sprites и меняем у нее в окне Inspector тип на Sprite (2D and UI), чтобы ее можно было добавить в интерфейс.
Открываем префаб MainMenuWindow, создаем кнопку, удаляем из нее дочерний объект Text, перетаскиваем иконку в компонент Image. Ставим галочку Preserve Aspect (для сохранения пропорций изображения) и кликаем Set Native Size чтобы установить размер кнопки равный размеру изображения. Перетаскиваем кнопку в поле PlayButton у объекта MainMenuWindow.
Перемещаем временно вручную камеру в нужное положение, примерно так:
Нажимаем Play и видим созданный уровень и шар. На сегодня это все. Еще раз ссылка на репозиторий, он будет обновляться вместе с выходом статей.