← Назад к вопросам

Расскажи про последний проект

1.3 Junior🔥 191 комментариев
#Опыт и софт-скиллы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Последний проект: Hyper-Casual Runner с продвинутой генерацией мира и системой событий

В качестве последнего завершенного коммерческого проекта я выступал техническим лидом и основным разработчиком на hyper-casual мобильном раннере для iOS и Android. Проект был реализован на Unity 2021.3 LTS с использованием DOTS (ECS) для критичных к производительности систем и стандартного OOP для игровой логики верхнего уровня. Основная цель — достичь стабильных 60 FPS на средних мобильных устройствах при высокой плотности объектов и сложной визуализации трассы.

Ключевые технологические задачи и решения

  1. Гибридная архитектура с 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** для динамической загрузки) и сложная бизнес-логика бустеров были реализованы классическим способом для скорости итераций и читаемости кода.

  1. Модульная система сегментов и процедурная сборка:
    Уровень состоял из префабов-сегментов длиной 100м. Мы разработали **систему взвешенного случайного выбора** с учетом истории и сложности. Каждый сегмент имел ScriptableObject-конфигурацию с параметрами:
    *   Вероятность появления.
    *   Совместимость с предыдущими/следующими типами сегментов (например, "прыжковый" не шел после "узкого коридора").
    *   Ссылки на возможные препятствия и их локации.

  1. Сложная система событий и реактивного геймплея:
    Чтобы игрок постоянно был вовлечен, мы внедрили **Event Bus** на основе C# **делегатов (Action/UnityEvent)**. Это позволило создавать динамические цепочки событий.
    *   **Пример цепочки**: Сбор 10 монет -> генерируется событие `OnCoinChainCompleted` -> менеджер бустеров активирует `Magnet` на 5 сек. -> по окончанию бустера запускается событие `OnBoostEnded` -> UI показывает специальное предложение.
    *   Это обеспечило **слабую связность (loose coupling)**: UI, система звуков, VFX и логика достижений реагировали на события, ничего не зная друг о друге напрямую.

  1. Оптимизация рендеринга и памяти:
    *   **Графика**: Использовали **Universal Render Pipeline (URP)** с bake'ным освещением и легковесными шейдерами для мобильных устройств. Для анимации персонажа и препятствий применяли **GPU Instancing**.
    *   **Память**: Все ассеты (скины, звуки, конфигурации сегментов) были переведены на **Addressable Assets System**. Это дало контроль над загрузкой и выгрузкой, уменьшив потребление оперативной памяти и время первого запуска.
    *   **Аналитика**: Интегрировали **Unity Analytics** и собственный сервис для трекинга поведения игроков на уровне "где чаще всего проигрывают", что позволяло оперативно балансить сложность.

Роль и результат

Я отвечал за архитектуру ядра игры, систему генерации мира, оптимизацию и интеграцию SDK (монетизация, аналитика). В тесном взаимодействии с геймдизайнерами мы быстро прототипировали и тестировали новые механики.

Итог: Проект был успешно запущен на маркетплейсах. На целевых устройствах удалось достичь стабильного 60 FPS при 70% заполнении CPU. Средняя сессия превысила расчетные показатели, во многом благодаря отзывчивому и динамичному геймплею, построенному вокруг событийной системы. Проект подтвердил эффективность гибридного подхода DOTS + OOP в Unity для high-load мобильных проектов, где критичны и производительность, и скорость разработки.