Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Последний проект: Hyper-Casual Runner с продвинутой генерацией мира и системой событий
В качестве последнего завершенного коммерческого проекта я выступал техническим лидом и основным разработчиком на hyper-casual мобильном раннере для iOS и Android. Проект был реализован на Unity 2021.3 LTS с использованием DOTS (ECS) для критичных к производительности систем и стандартного OOP для игровой логики верхнего уровня. Основная цель — достичь стабильных 60 FPS на средних мобильных устройствах при высокой плотности объектов и сложной визуализации трассы.
Ключевые технологические задачи и решения
- Гибридная архитектура с DOTS для генерации мира:
Основной вызов заключался в бесшовной и разнообразной генерации бесконечной трассы. Мы использовали **гибридный подход**:
* **Data-Oriented Tech Stack (DOTS)**: Для высокопроизводительного спавна, перемещения и управления тысячами препятствий, монеток и элементов окружения использовались **Entity Component System (ECS)** и **C# Jobs System**. Это позволило эффективно распределять вычисления по нескольким ядрам CPU.
```csharp
// Упрощенный пример Job для перемещения сегментов мира
public struct WorldScrollJob : IJobParallelFor
{
public NativeArray<Translation> translations;
public float deltaSpeed;
public void Execute(int index)
{
var pos = translations[index];
pos.Value.z -= deltaSpeed; // Движемся навстречу игроку
translations[index] = pos;
}
}
```
* **Объектно-ориентированная логика**: Менеджеры игры, система сохранений (использовали **OdinSerializer** для бинарных сейвов), UI (на **Unity UI** с **Addressable Assets** для динамической загрузки) и сложная бизнес-логика бустеров были реализованы классическим способом для скорости итераций и читаемости кода.
- Модульная система сегментов и процедурная сборка:
Уровень состоял из префабов-сегментов длиной 100м. Мы разработали **систему взвешенного случайного выбора** с учетом истории и сложности. Каждый сегмент имел ScriptableObject-конфигурацию с параметрами:
* Вероятность появления.
* Совместимость с предыдущими/следующими типами сегментов (например, "прыжковый" не шел после "узкого коридора").
* Ссылки на возможные препятствия и их локации.
- Сложная система событий и реактивного геймплея:
Чтобы игрок постоянно был вовлечен, мы внедрили **Event Bus** на основе C# **делегатов (Action/UnityEvent)**. Это позволило создавать динамические цепочки событий.
* **Пример цепочки**: Сбор 10 монет -> генерируется событие `OnCoinChainCompleted` -> менеджер бустеров активирует `Magnet` на 5 сек. -> по окончанию бустера запускается событие `OnBoostEnded` -> UI показывает специальное предложение.
* Это обеспечило **слабую связность (loose coupling)**: UI, система звуков, VFX и логика достижений реагировали на события, ничего не зная друг о друге напрямую.
- Оптимизация рендеринга и памяти:
* **Графика**: Использовали **Universal Render Pipeline (URP)** с bake'ным освещением и легковесными шейдерами для мобильных устройств. Для анимации персонажа и препятствий применяли **GPU Instancing**.
* **Память**: Все ассеты (скины, звуки, конфигурации сегментов) были переведены на **Addressable Assets System**. Это дало контроль над загрузкой и выгрузкой, уменьшив потребление оперативной памяти и время первого запуска.
* **Аналитика**: Интегрировали **Unity Analytics** и собственный сервис для трекинга поведения игроков на уровне "где чаще всего проигрывают", что позволяло оперативно балансить сложность.
Роль и результат
Я отвечал за архитектуру ядра игры, систему генерации мира, оптимизацию и интеграцию SDK (монетизация, аналитика). В тесном взаимодействии с геймдизайнерами мы быстро прототипировали и тестировали новые механики.
Итог: Проект был успешно запущен на маркетплейсах. На целевых устройствах удалось достичь стабильного 60 FPS при 70% заполнении CPU. Средняя сессия превысила расчетные показатели, во многом благодаря отзывчивому и динамичному геймплею, построенному вокруг событийной системы. Проект подтвердил эффективность гибридного подхода DOTS + OOP в Unity для high-load мобильных проектов, где критичны и производительность, и скорость разработки.