Hyper Casual игра на Unity с нуля. #1 Начало
Всем привет. Хочу написать цикл обучающих статей на тему разработки Hyper Casual игры на Unity под мобильные платформы. С нуля и до полной готовности.
Чтобы немного упростить, не будем придумывать новую игру, а сделаем клон популярной игры Roller Splat от Voodoo (Google Play, App Store).
Примерный список того, что будем делать:
- архитектура проекта;
- геймплей;
- UI;
- редактор уровней;
- локализации;
- тесты;
- реклама, аналитика, инапы.
Переходим к делу
Разработку будем вести на последней версии Unity (на текущий момент 2019.2.4f1). Качаем Unity Hub, устанавливаем, создаем новый проект.
Подготовим базовую структуру папок (будет меняться в процессе разработки).
В папке Assets создадим две папки "_" и "AwesomeCompany". Вы можете назвать их по-другому. В первой мы будем хранить все файлы текущего проекта. Во вторую вынесем общие скрипты, которые можно будет использовать в других проектах.
Resources - важно назвать именно так, из этой папки потом мы сможем загружать данные во время игры. Ознакомиться с зарезервированными именами папок Unity можно здесь.
Resources/DynamicData - здесь будем хранить различные динамические данные (уровни, локализации и т.д.).
Resources/Gameplay - здесь объекты, которые используются непосредственно в геймплее (префабы шаров, стен, пола).
Resources/UI/Windows - очевидно, интерфейс.
Scenes - сцены. Скорее всего она будет одна.
Scripts - скрипты. Внутри будет деление по папкам.
Sprites - изображения, которые используются в интерфейсе.
Пишем скрипты
AwesomeCompany/Common/Singleton.cs - Базовый класс для всех синглтонов в проекте. Подробнее можно почитать, например, здесь.
Singleton — это порождающий паттерн проектирования, который гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
AwesomeCompany/Common/UI/WindowManager.cs - менеджер, к которому мы будем обращаться чтобы открывать или закрывать окна интерфейса. Загружает окна из папки Resources и добавляет на сцену, каждое следующее окно будет поверх предыдущего.
AwesomeCompany/Common/UI/WindowBase.cs - базовый скрипт окна, от него будут наследоваться все остальные окна.
_/Scripts/App.cs - Основной скрипт нашего приложения, в нем будут все сервисы, менеджеры и различные данные. Наследуется от синглтона - значит будет существовать в единственном экземпляре и к нему будет доступ из любого скрипта.
_/Scripts/UI/Windows/MainMenuWindow.cs - скрипт окна главного меню. Пока что ничего не делает.
Настроим сцену
Создадим пустой объект, правой кнопкой в окне Hierarchy -> Create Empty, назовем его App и добавим на него скрипт App.cs. Этот объект будет существовать на протяжении всего времени пока запущена игра, даже если загрузить другую сцену.
Затем, создадим UI -> Canvas. Переименуем объект в MainMenuWindow и повесим на него скрипт MainMenuWindow. Выставим параметры скейла в компоненте Canvas Scaler в Full HD (1080x1920) портретная ориентация. Создадим префаб данного окна, перетащив его в _/Resources/UI/Windows и удалим его со сцены.
В методе Start скрипта App мы добавили тестовый показ окна MainMenuWindow. А в методе Start окна мы выводим в консоль сообщение для проверки работоспособности.
Запускаем игру, видим что в окне иерархии внутри объекта WindowManager создался объект MainMenuWindow и в консоли сообщение "MainMenuWindow Start".
На сегодня, пожалуй, это все.
Подводя итог: мы создали базовый скелет приложения, который будем дальше обвешивать функционалом. Сейчас у нас есть единая точка входа к данным и система для работы с UI.