← Puzzle Breakers

ТЕХНИЧЕСКИЙ КЕЙС · Инструменты разработки

Ускорение выпуска игрового контента

Механики, управляемые данными, конфигурационный конвейер, редакторские инструменты и AI-подходы для более быстрых итераций.

UnityC#LuaData-drivenАвтоматизацияLiveOps

Проблема

По мере развития LiveOps-проекта требовалось выпускать всё больше контента. При этом недостаточно было просто наращивать объём: новые герои, способности, снаряжение и события должны были оставаться интересными игрокам. Это увеличивало как сложность игровой логики, так и нагрузку на команды, которые готовили, проверяли и выпускали контент.

Задача состояла в том, чтобы ускорить итерации и сохранить управляемость разработки, не сводя качество новых механик к набору однотипных решений.

Мой вклад

Я участвовал в развитии технических подходов и инструментов, которые уменьшали объём повторяющейся ручной работы и позволяли команде сосредоточиться на механиках и их игровом опыте.

Реализация

Ускорение достигалось несколькими взаимодополняющими способами.

Конфигурационный конвейер

Поведение снаряжения и условий боевых эффектов переводилось на универсальные, конфигурируемые механики вместо отдельных скриптов под каждый частный случай. Конвейер связывал данные игровых сущностей, их скрипты и средства визуализации в повторяемый производственный процесс. Расширения Unity Editor и вспомогательная автоматизация на Bash и Python дополнительно снимали ручные операции у VFX-художников, геймдизайнеров и разработчиков.

Ниже — упрощённый иллюстративный пример, а не фрагмент внутренней конфигурации проекта. Раньше особое поведение могло быть жёстко привязано к отдельному скрипту в описании сущности:

<!-- До: отдельный скрипт под конкретный предмет -->
<equipment id="crystal_of_frost">
  <battle_script>CrystalOfFrostScript</battle_script>
</equipment>

После типовая механика описывалась данными, а общий движковый код интерпретировал эти данные:

<!-- После: общий механизм и параметры из конфига -->
<equipment id="crystal_of_frost" mechanic="apply_effect">
  <effect type="slow" duration="2" />
  <condition type="on_ability_hit" />
</equipment>

Такой подход не отменяет код: он переносит повторяющиеся различия из специализированных классов в проверяемые параметры конфигурации. Новый вариант предмета или эффекта можно собрать из существующих примитивов, а общий код механики развивается в одном месте.

На видео — пример игроко-видимого результата: экипировка питомца меняет его способность через общую механику снаряжения.

Экипировка питомца изменяет его способность без создания отдельного специализированного боевого сценария.

Скриптовый язык Lua

Я принимал участие в частичном переносе игровой логики на Lua. Это позволило сделать разработку и настройку части контента более гибкой, сохраняя C# для систем, где он был необходим.

Пример ниже — псевдокод с условными именами. Он иллюстрирует перенос логики контентной способности из специализированного C#-класса в скрипт, который исполняется через игровой контекст:

// До: отдельный C#-класс под конкретную способность
sealed class FrostStrikeAbility : AbilityScript
{
    public override void Execute(BattleContext battle, Actor caster, Actor target)
    {
        battle.DealDamage(caster, target, caster.Power * 1.2f);
        battle.ApplyEffect(target, EffectType.Slow, turns: 2);
    }
}
-- После: псевдокод Lua с тем же намерением
function execute(context, caster, target)
    context:deal_damage(caster, target, caster:power() * 1.2)
    context:apply_effect(target, "slow", { turns = 2 })
end

Общие боевые правила и доступ к состоянию остаются на стороне движка, а скрипт описывает конкретное поведение контента через ограниченный набор операций.

AI-инструменты агентской разработки

AI-инструменты использовались для решения рутинных задач, которые можно было формализовать правилами разработки: анализа, подготовки и проверки рабочих материалов. Это помогало быстрее проходить повторяющиеся этапы, оставляя за разработчиком технические решения и контроль результата.

Внутренние форматы, код и конкретные сценарии применения не раскрываются.

Результат

Новые подходы помогли сократить время доставки нового контента вдвое. Например, новое свойство эффекта удалось применить к конфигурациям всех героев и акторов одним изменением: в затронутом наборе было 377 файлов, без ручной правки логики каждого персонажа.