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

Расскажи про прошлые команды

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

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

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

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

Опыт работы в командах на проектах Unity

За свою 10-летнюю карьеру я работал в разнообразных командах — от небольших инди-студий до крупных издателей с распределёнными командами по 50+ человек. Каждая команда формировала мой подход к разработке, архитектуре и коммуникации.

1. Инди-студия (мобильные гипер-кэжуал игры, команда 5-7 человек)

Роль: Unity Developer (единственный программист)

  • Состав: 2 геймдизайнера, 2 художника, 1 продакт-менеджер, 1 тестировщик на аутсорсе.
  • Моя ответственность: Полный цикл — от прототипа на Unity до публикации в App Store и Google Play. Архитектура, UI, геймплей, интеграция SDK (реклама, аналитика), оптимизация.
  • Ключевой вызов и решение: Необходимость быстрого прототипирования (1-2 недели на концепт) при поддержке долгосрочной кодовой базы. Реализовал модульную систему на основе Scriptable Objects для данных уровней и настроек игровых механик. Это позволило дизайнерам самостоятельно создавать и балансить контент без погружения в код.
    // Пример системы данных на ScriptableObject
    [CreateAssetMenu(fileName = "NewLevelData", menuName = "Game/Level Data")]
    public class LevelData : ScriptableObject
    {
        public int levelIndex;
        public GameObject environmentPrefab;
        public ObjectiveType objective;
        public int targetScore;
        public int moveCount;
        public Reward[] completionRewards;
    }
    
  • Что вынес: Глубокое понимание полного цикла разработки, приоритизация производительности на слабых устройствах, навык самостоятельного принятия архитектурных решений.

2. Мидкор-студия (mid-core мобильная RPG, команда 15-20 человек)

Роль: Senior Gameplay Programmer (в подразделении из 4 программистов)

  • Состав: Техлид, 3 геймплей-программиста (я в их числе), 2 бэкенд-программиста, продюсер, команда дизайнеров (геймдизайн, уровни, баланс), арт-команда.
  • Моя ответственность: Разработка ключевых геймплейных систем: боевая система с комбо и умениями, инвентарь и экипировка, диалоговая система.
  • Ключевой вызов и решение: Создание гибкой и расширяемой боевой системы для постоянного добавления новых героев и способов. Внедрил паттерн Состояние (State Pattern) для управления анимациями и логикой персонажа, и систему модификаторов эффектов (Effect Modifier System) на основе данных.
    // Упрощённый пример состояния атаки
    public class AttackState : ICharacterState
    {
        private CharacterController _controller;
        private AttackData _currentAttack;
    
        public void Enter(AttackData attack)
        {
            _currentAttack = attack;
            _controller.Animator.Play(attack.AnimationHash);
            ApplyDamageWithModifiers();
        }
    
        private void ApplyDamageWithModifiers()
        {
            float finalDamage = _currentAttack.BaseDamage;
            foreach (var modifier in _controller.StatusModifiers)
            {
                finalDamage = modifier.ModifyDamage(finalDamage);
            }
            _controller.Target.TakeDamage(finalDamage);
        }
    }
    
  • Что вынес: Навык работы в строгом Git-флоу с код-ревью, важность четкого технического задания (ТЗ) от дизайнеров, опыт рефакторинга легаси-кода и написания юнит-тестов для критических систем.

3. Крупный издатель (AAA-консольный проект, распределённая команда 50+ человек)

Роль: Unity Tools / Core Programmer (в кросс-дисциплинарной команде "Технологии")

  • Состав: Техдир проекта, ведущие программисты графики, AI, tools, а также тесное взаимодействие с продюсерами, левел-дизайнерами и арт-отделом.
  • Моя ответственность: Разработка внутренних Editor Extension для ускорения контент-пайплайна: инструмент для размещения и настройки интерактивных объектов на уровнях, плагин для батч-обработки ассетов.
  • Ключевой вызов и решение: Левел-дизайнеры тратили часы на ручное размещение префабов. Я создал кастомный Editor Window с drag-and-drop функциональностью, палитрой префабов и возможностью массового редактирования свойств. Это сократило время на создание блоков уровня на 70%.
    // Пример простого инструмента размещения в Editor
    public class LevelDesignTool : EditorWindow
    {
        private GameObject _selectedPrefab;
        private BrushMode _currentMode = BrushMode.Paint;
    
        [MenuItem("Tools/Level Design Tool")]
        static void Init() => GetWindow<LevelDesignTool>("Design Tool");
    
        void OnGUI()
        {
            _selectedPrefab = (GameObject)EditorGUILayout.ObjectField("Prefab", _selectedPrefab, typeof(GameObject), false);
            _currentMode = (BrushMode)EditorGUILayout.EnumPopup("Mode", _currentMode);
    
            if (GUILayout.Button("Paint Selected on Surface") && _selectedPrefab != null)
            {
                // Логика рисования префабов по рейкасту
            }
        }
    }
    
  • Что вынес: Работу по Agile/Scrum (спринты, демо, ретроспективы), важность документации и создания удобных инструментов для коллег не-программистов, опыт оптимизации под Console Hardware (PS/Xbox).

Эволюция моего подхода к командной работе:

  • От универсального соло-разработчика к глубокой специализации в рамках большой команды.
  • Понимание, что качественный код — это не только работоспособность, но и читаемость для коллег и поддерживаемость на года.
  • Осознание критической важности мягких навыков (soft skills): умение задавать правильные вопросы, прояснять требования, доносить технические ограничения до не-технических специалистов и выступать с предложениями по улучшению процессов.

Каждый этап научил меня адаптировать свои технические решения и стиль коммуникации под конкретные цели команды и проекта.

Расскажи про прошлые команды | PrepBro