← Назад в портфолио
Unity / C# Gameplay Case Study

Калибр Хаоса
Caliber of Chaos

2D / 2.5D action-puzzle shooter, где цветные выстрелы не только наносят урон, но и меняют состояние поля боя.

Враги и объекты защищены elemental seals. Игрок должен выбрать правильный элемент, снять печать, очистить заражение, трансформировать окружение и только потом добивать цель. Это не просто шутер — это бой, где пуля является инструментом мутации, очищения и тактического решения.

Unity 6 C# Top-down Shooter Action-Puzzle Roguelite Prototype ScriptableObject Architecture Object Pooling
Project Overview

Главный hook: стрельба меняет правила боя

Что делает игру уникальной

Обычно в twin-stick shooter пуля — это просто урон. В «Калибре Хаоса» пуля несёт element, mutation context, faction, modifiers и impact rules. Она может ломать печати, очищать заражение, заряжать узлы, менять цвет земли, превращать объекты в союзников или запускать взрывную реакцию.

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

Моя роль

Проект сделан как solo prototype: я проектировал core loop, писал gameplay systems, собирал архитектуру, настраивал Unity-префабы, тестировал взаимодействия и доводил систему до playable demo.

GD
Game DesignerСпроектировал fantasy очищения, elemental combat, seals, nests, risk/reward и структуру уровней.
C#
Gameplay ProgrammerРеализовал оружие, пули, врагов, мутацию, урон, UI feedback, inventory и flow уровня.
SA
Systems ArchitectРазложил сложный бой на маленькие компоненты, pipeline handlers, ScriptableObject configs и переиспользуемые модули.
Core Gameplay Loop

От заражённой зоны до очищения этажа

Войти в зонуИгрок попадает в заражённую комнату с врагами, узлами, гнездом или закрытым проходом.
Считать цвет печатиУ врага или объекта есть active seal: Bio Red, Crystal Blue, Purge Green или Gold Yellow.
Выбрать оружиеИгрок переключает weapon core / weapon slot и стреляет правильным элементом.
Сломать защитуПравильный цвет снимает печать или заряжает узел; неправильный может сбросить прогресс.
Нанести HP damageПосле снятия защиты обычный damage pipeline начинает работать по здоровью цели.
Очистить или мутироватьPurge очищает, другие элементы меняют свойства объектов, земли и врагов.
Получить наградуИгрок получает essence, доступ к сундуку, проходу, порталу или новой сборке оружия.
Идти вышеЦикл масштабируется в башни, этажи, босса и мету крафта амулетов из частей монстров.
Technical Architecture

Сложная механика собрана из маленьких понятных систем

Weapon → Bullet → Impact Pipeline → World Reaction

WeaponFrame
форма выстрела
WeaponCore
элемент
WeaponMod
поведение
BulletContext
данные выстрела
BulletMover
движение
Impact Pipeline
цепочка правил
Damage / Seal / Mutation
результат

WeaponFrame

Задаёт форму оружия: pistol, auto, shotgun, mortar, fire rate, spread, bullet speed, gravity mode и количество снарядов.

WeaponCore

Определяет элемент и смысл выстрела: Bio, Crystal, Purge, Gold. Core влияет на damage, emission color и реакцию мира.

WeaponMod

Добавляет поведение пули: Simple, Homing, Explosive, fragments. Модуль не ломает frame/core, а расширяет их.

Implemented Gameplay Systems

Что уже показывает мой уровень как Unity/C# специалиста

Bullet Impact Pipeline

Пуля не превращена в огромный монолитный класс. Вместо этого она проходит цепочку impact handlers. Каждый handler отвечает за маленькую часть: игнор слоёв, faction rules, shields, ground mutation, mutation objects, spell nodes, damage, explosion и despawn.

BulletImpactPipeline.cs
BulletImpactContext context = new(...);

foreach (BulletImpactHandler handler in handlers)
{
    handler.Handle(context);

    if (context.IsResolved)
        break;
}

if (!context.StopProcessing)
    context.StopAndDespawn();

Почему это сильное архитектурное решение

Когда у проекта появляются seals, shields, mutation, explosive bullets, faction rules и разные типы объектов, простая логика OnCollision быстро разрастается. Pipeline позволяет добавлять новые реакции мира без переписывания всей пули.

Open/Closed подход: новый эффект = новый handler.
Пуля переносит context, но не знает деталей всех целей.
Порядок обработки виден в Inspector и легко дебажится.
Система готова к расширению: ricochet, poison pools, armor, boss phases, destructible props.
Кодовая сторона pipeline: контекст попадания проходит через обработчики и останавливается, когда взаимодействие решено.
Prefab пули: отдельные компоненты для движения, физики и impact логики.
Enemy prefab: Health, EnemyMovement, Behaviour, SpellNodesCounter, MutationController и special force пресеты.

Enemy AI

Враги собраны из поведения, движения, атаки, health, target detection и mutation controller. Есть melee, shooter, patrol, friendly attacker и spawner-driven logic.

Mutation System

ElementType влияет на ground, enemies и objects. Crystal может замедлять, Bio заражать, Purge очищать, Gold усиливать через отдельные presets.

Seal System

Spell nodes и elemental seals создают puzzle-layer поверх шутера: урон по HP разрешён только после правильного элемента.

Spawner System

Спавнеры используют режимы MaintainAlive, FiniteWave, Burst/Single, budget и max-alive ограничения, чтобы собирать разные encounter patterns.

System Breakdown

Архитектура проекта в виде карты компонентов

Gameplay Composition
Player
 ├─ PlayerMovement
 ├─ PlayerWeapon
 ├─ GroundDetector
 ├─ Inventory
 └─ GameFlow interaction

Weapon
 ├─ WeaponFrame  // rate, spread, gravity, projectiles
 ├─ WeaponCore   // element, damage, emission
 ├─ WeaponMod    // simple, homing, explosive
 └─ BulletSpawner + Pool

Bullet
 ├─ BulletContext
 ├─ BulletMover
 ├─ Rigidbody + Collider
 └─ BulletImpactPipeline
Enemy / World Composition
Enemy
 ├─ Health
 ├─ EnemyMovement // NavMeshAgent
 ├─ EnemyBehaviour
 ├─ TargetDetector
 ├─ AttackDetector / Hitbox
 ├─ SpellNodesCounter
 └─ MutationControllerEnemy

World Objects
 ├─ MutationObject
 ├─ TransformationObject
 ├─ ElementChargeCounter
 ├─ SpecialForce
 └─ Visual via MaterialPropertyBlock
Design Value

Почему эта система интересна для игрока

Бой как чтение ситуации

Игрок смотрит не только на HP врага, но и на цвет печати, тип мутации, позицию врагов, состояние земли и объекты рядом.

Оружие как конструктор

Frame/Core/Mod дают масштабируемую базу: новые типы оружия можно собирать комбинациями, а не писать каждый ствол заново.

Мир как игровая система

Окружение не декоративное: оно мутирует, очищается, блокирует путь, помогает игроку или усиливает угрозу.

Current Status

Прототип уже демонстрирует playable core и системную глубину

Реализовано

Core shootingDone
Weapon switchingDone
Bullet Impact PipelineDone
Enemy behaviour prototypesDone
Seal / Spell Node logicDone
Mutation object interactionsDone
Playable WebGL prototypeDone

В разработке

More enemy variationsIn progress
Better UI feedbackIn progress
Floor goals and tower structureIn progress
Meta crafting: monster parts + essenceDesign
Boss and biome progressionDesign
Polish, VFX, balanceIn progress
What This Project Demonstrates

Кейс показывает меня как разработчика, который умеет не только писать код, но и собирать игру в систему

Gameplay Programming.
Оружие, пули, столкновения, урон, enemy AI, spawners, interactable objects, inventory и game flow.

Game Systems Design.
Цветные печати, очищение, мутация, risk/reward, башни, цели этажа, крафт и progression loop.

Scalable Architecture.
Композиция компонентов, ScriptableObject configs, pipeline handlers, pooling, faction rules и расширяемые modules.