Привет, Хабр!

Это моя первая статья, поэтому для начала представлюсь. Меня зовут Виктор, мне 40 лет, из которых почти 20 я на разных ролях участвую в разработке различного программного обеспечения для крупных корпораций (в основном финтех). Путь был долгий и тернистый, но сейчас я занимаю роль Системного архитектора и по совместительству Руководителя направления интеграции.

Я всегда любил игры, у меня даже был собственный канал с летсплеями и обзорами разных игр, который, к сожалению, не сыскал успеха. Несмотря на это, около двух лет назад я решил с ноги ворваться в мир геймдева. Ничто не предвещало беды, просто одним февральским вечером будто щелкнуло что-то в мозгу - ХОЧУ… ДЕЛАТЬ… ИГРЫ…

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

С чего начать? Паника первого шага

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

Мой внутренний архитектор сразу же попытался выстроить «стратегию»:

Выбор движка. Начал с банального гугления «какой движок выбрать для новичка». Unity vs Unreal Engine - это холивар, который для новичка звучит как спор о преимуществах космических кораблей, когда ты не умеешь водить машину. После недели изучения остановился на Unity. Я хорошо знаком с Java, они с C# как братья близнецы, а вот “плюсы” в моей жизни были слишком давно. Плюс, сообщество казалось более дружелюбным к инди-разработчикам.

Первый “Hello, World!”... который в геймдеве превращается в “Hello, Cube!”. Помню этот детский восторг, когда я заставил красный куб вращаться по нажатию кнопки. Это было волшебство. Но эйфория быстро сменилась осознанием: между вращающимся кубом и даже самой простой игрой - пропасть.

От корпоративной Java к Unity API

Знание Java из enterprise (и, соответственно “Узнавание C#”) не подготовило меня к работе с Unity API. В корпоративной Java ты работаешь с классами, коллекциями, базами данных. В Unity - с GameObject, Transform, Rigidbody, Collider.

Конкретный пример: "Простейшая задача - заставить объект двигаться”. Вместо привычного цикла или таймера, я столкнулся с Update() и FixedUpdate(). Понятие Time.deltaTime для независимости от частоты кадров стало небольшим открытием. Вот мой первый “движок” для куба:

public class SimpleMover : MonoBehaviour
{
    public float speed = 5.0f;
    void Update()
    {
        //Вначале я делал так:
        // transform.position += new Vector3(speed, 0, 0);
        
        // Но потом прочитал документацию:
        float movement = speed * Time.deltaTime;
        transform.Translate(movement, 0, 0);
    }
}

Стена: когда 20 лет опыта мешают

Самым неожиданным для меня стало то, как мой богатый опыт в enterprise-разработке мешал мне.

Перфекционизм vs Прототипирование. В финтехе любая строчка кода - это потенциальные миллионы убытков или риски для безопасности. Все должно быть идеально: архитектура, паттерны, документация. В геймдеве на ранних этапах главное - скорость итераций. “Сделал работающий прототип? Отлично! Выкидывай и делай заново, но уже с новыми знаниями”. Мой внутренний архитектор плакал, когда я видел свой “говнокод”, но играющий прототип уровня “собери 10 монеток” приносил несоизмеримо больше пользы.

Архитектурная битва: MonoBehaviour vs Чистый C#

Мой перфекционизм архитектора требовал создать абстракции для всего. Я пытался делать GameEntity, ICharacterController и инжектить зависимости, но сталкивался с тем, что MonoBehaviour не любит сложных конструкторов и живет в своем собственном жизненном цикле.

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

public class SimplePlayerController : MonoBehaviour
{
    public enum PlayerState { Idle, Running, Jumping }
    public PlayerState CurrentState { get; private set; }
    
    void Update()
    {
        switch (CurrentState)
        {
            case PlayerState.Idle:
                if (Input.GetKey(
KeyCode.Space)) CurrentState = PlayerState.Jumping;
                break;
            case PlayerState.Jumping:
                // Логика прыжка...
                break;
        }
    }
}

Вывод: Я осознал, что на прототипировании не нужно бороться с экосистемой движка. MonoBehaviour - это и есть твой основной строительный блок, и сначала нужно научиться эффективно использовать его, а уже потом придумывать надстройки.

Сложное vs Простое. Мой мозг сразу же начинал выстраивать сложные абстракции и системы данных для игры-платформера. А нужно было просто заставить персонажа прыгать и не падать сквозь пол. Я потратил три дня на проектирование “масштабируемой системы управления игровыми сущностями”, вместо того чтобы просто сделать десять платформ.

Проблема коллизий: 2D vs 3D физика

Конкретный пример. Создавая свою первую 2D-игру, я по привычке использовал Rigidbody (который по умолчанию 3D) и долго не мог понять, почему коллизии не работают. Оказалось, для 2D нужен Rigidbody2D и коллайдеры BoxCollider2D. Это кажется очевидным, но для новичка - час-два гугления. Понимание разницы между OnCollisionEnter и OnTriggerEnter было еще одним ключевым моментом.

Синдром самозванца... наоборот. В корпорации я - эксперт. Здесь я - ноль. Было непривычно и даже унизительно смотреть 40-минутные туториалы на YouTube, чтобы понять, как работает Rigidbody. Приходилось заново учиться быть учеником: не бояться задавать глупые вопросы на форумах, признаваться в незнании и принимать критику.

Что же помогло? Три столпа выживания

Несмотря на все трудности, я не сдался. Мне помогли три вещи, которые я вынес из своего “прошлого” опыта.

Дисциплина. Я не ждал вдохновения. Я выделил под геймдев ровно 10 часов в неделю (два вечера по будням и одно воскресное утро) и жестко их придерживался. Это был мой “технический долг” перед самим собой.

Умение учиться. За 20 лет в IT я сменил с десяток технологий. Я давно понял, что главный навык - не знание конкретного фреймворка, а умение находить и усваивать информацию. Этот навык оказался бесценным.

Сообщество. Я нашел локальное сообщество инди-разработчиков. Видеть, как другие, такие же энтузиасты, сталкиваются с теми же проблемами, что и ты, и вместе искать решения - это невероятно мотивирует. В корпоративном мире ты часто варишься в собственном соку, а здесь - чувствуешь себя частью чего-то живого и творческого.

Технические инсайты: что я вынес спустя два года

Вот несколько конкретных технических уроков, которые могут быть полезны другим новичкам:

1. ScriptableObjects — лучший друг архитектора

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

[CreateAssetMenu(fileName = "WeaponData", menuName = "Game/Weapon Data")]
public class WeaponData : ScriptableObject
{
    public string weaponName;
    public float damage;
    public float fireRate;
    public GameObject projectilePrefab;
}

2. Оптимизация Draw Calls

Когда количество объектов на сцене перевалило за тысячу, игра начала тормозить. Статический батчинг и использование Атласов для спрайтов решили проблему. Я научился пользоваться Профайлером и Frame Debugger — инструментами, без которых в геймдеве никуда.

3. Работа с Asset Bundles и Addressable Assets

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

public class AssetLoader : MonoBehaviour
{
    public async Task<GameObject> LoadAssetAsync(string address)
    {
        var handle = Addressables.LoadAssetAsync<GameObject>(address);
        await handle.Task;
        return handle.Result;
    }
}

И что в итоге?

Прошло почти два года. Я не создал новый “Ведьмак” и даже не разбогател. Но я сделал несколько джем-игр, пару небольших, но законченных казуалок для мобилок. А сейчас я полностью погружен в разработку своего первого комплексного проекта. Это амбициозно, сложно и невероятно увлекательно.

Это по-прежнему хобби, которое отнимает все свободное время, которого и так немного, но оно того стоит.

Так что же я получил, сменив уютное кресло архитектора на нелегкий путь джуна в геймдеве?

Оживление ума. Изучение совершенно новой области встряхнуло мой мозг так, как никакие корпоративные тренинги не могли. Я снова почувствовал азарт первооткрывателя.

Новое видение своей основной работы. Невероятно, но эти “игрушки” сделали меня лучше в моей основной работе. Я стал проще относиться к прототипам, чаще применять подход “сделай-проверь-переделай” и ценить быстрые итерации.

Чистое творчество. В корпоративном мире твой успех измеряется в KPI, ROI и выполненных спринтах. В геймдеве (на моем уровне) успех - это момент, когда твой друг смеется от придуманной тобой глупой механики или когда ты сам получаешь удовольствие от геймплея, который создал. Это невероятно заряжает.

Резюме для тех, кто думает так же

Если вам за 30, 40, 50, и у вас в голове зажегся тот самый “огонек” - не гасите его. Неважно, геймдев это, керамика или Data Science.

Ваш опыт - не якорь, а балласт, который поможет вам не сбиться с курса. Вы уже умеете учиться, планировать и доводить дело до конца. Вам будет сложно, некомфортно и временами стыдно за свои “детские” ошибки. Но ощущение, когда ты преодолеваешь очередную “стену” и видишь результат своего труда - бесценно.

Это не призыв бросить работу и ринуться в омут. Это напоминание, что можно быть серьезным архитектором днем и безумным джуном-геймдевом по вечерам. И в этом безумии есть своя гармония.

А у вас был подобный опыт? Пробовали ли вы кардинально сменить фокус в зрелом возрасте? Делитесь в комментариях!

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


  1. Komissarova_Nastya
    22.10.2025 07:04

    Удачи!


    1. Wicort Автор
      22.10.2025 07:04

      Спасибо, она мне понадобится )


      1. Komissarova_Nastya
        22.10.2025 07:04

        я тоже работаю инженером, но дома начинаю пилить игру) но у меня подход попроще. 2.5д, возможно пиксельная, по жанру как oxenfree


        1. Wicort Автор
          22.10.2025 07:04

          Ну, это кому что проще. Для меня 2D графика это кошмар и мучение - руки совсем не из того места. А вот для 3D могу хоть что-то похожее на правду собрать в Блендере.


          1. Zara6502
            22.10.2025 07:04

            а в чем кошмар и мучение? на 1 координату меньше, нет камеры как таковой, проще технические решения. Если вы про рисование, то примитивы можно сейчас генерировать.


            1. Wicort Автор
              22.10.2025 07:04

              Да, я именно про рисование. Да и личное предпочтение - все-таки 3D мне нравится больше, чем 2D, по крайней мере именно со стороны работы с графикой.


              1. Zara6502
                22.10.2025 07:04

                мне как человеку выросшему на играх с 80-х всё же кажется что для хорошего 3д, чтобы это смотрелось нормально - нужно моделировать и уметь это делать на приличном уровне. Иначе это будет выглядеть как игра PS1, из глаз кровь хлынет от такой графики. Посмотрите на игры Kingdom New Lands, The Final Station - простейшая графика, но мир просто отличнейший, в 3д такое вообще не реализовать, когда один пиксель может передать информации больше чем 100 моделей.


                1. Wicort Автор
                  22.10.2025 07:04

                  Так а я же не спорю ) мне 40 лет и я тоже вырос на 8-битках. Они прекрасны. Даже сейчас очень много крутых пиксельных игр, которые с уверенностью могу назвать шедевром с моей точки зрения. Но делать 2D игры самому пока не хочется. Ведь любую игру нужно делать интересной. Нужно уметь передать в одном пикселе тот самый мир. У меня это пока не получается...


                  1. Zara6502
                    22.10.2025 07:04

                    Понял, отстал )


        1. janvarev
          22.10.2025 07:04

          Я вот с интересом фигачу ролеплей в DnD или не DnD стиле в современных LLM. Идея "можно идти куда угодно и делать что угодно" для меня до сих пор завораживающая )


  1. bazilxp
    22.10.2025 07:04

    А смотрел ли другие инструменты Godot , Love2d , Cocos2d ?


    1. Wicort Автор
      22.10.2025 07:04

      Да, смотрел (кроме Love2d, о таком даже не слышал), но поверхностно, т.е. только в виде каких-то обзоров и сравнений движков на Ютубе. Сам руками не трогал. Больше всего оттолкнуло малое количество обучающих материалов (по крайней мере на тот момент) и основной язык разработки. C# теперь навечно в моем сердечке ))


      1. Suvitruf
        22.10.2025 07:04

        К слову, в Godot можно (и нужно) на C# писать.


        1. Wicort Автор
          22.10.2025 07:04

          То, что можно - знаю. Нужно - впервые, если честно вижу такое мнение, но спорить с ним не имею права, так как некомпетентен в этом вопросе.


          1. Suvitruf
            22.10.2025 07:04

            Он просто поудобнее. Особенно для тебя, раз ты джавист.


      1. bazilxp
        22.10.2025 07:04

        тут дело не в языке , а в философии проектов...

        Есть навороченные фреймворки с кучей состояний Тот же Юнити как пример.

        Есть примитивные фреймоворки вроде Love2d , надо заморочится с некоторыми вещами сделать свои реализации.

        Допустим нужен менджер сцен , в Love2d его нет , так же самое рендеринг нужно репку чесать как сделать...

        В Юнити есть разные варианты из коробки.

        Вопрос стоит в сложности задачи,отсюда и фреймворк выбирается. Из самых супер успешних проектов на Love2d Balatro к примеру.


  1. John_Go
    22.10.2025 07:04

    Из статьи непонятно, это все таки хобби паралелльно с работой или ушли с основной работы?) Есть какие-то примеры игр, пусть даже мобильных? Как сейчас обстоят дела с лицензиями и роялти у Unity? Ну и последнее - у Unreal Engine вроде огромнейшее количество примеров, бесплатных ассетов, megascans от quixel, обучающих материалов на Ютубах, Udemi, да и в целом документация классная, а по описанию проблем, которые вы решали в Unitiy, все вроде как это уже реализовано "из коробки" в UE.


    1. Wicort Автор
      22.10.2025 07:04

      Это всё еще хобби, хотя где-то в глубине души тлеет огонек надежды, что когда-нибудь хобби превратится в основной источник дохода. К сожалению, даже если это и произойдет, то очень нескоро - зарплата на текущем месте работы слишком хороша и догнать ее на разработке игр просто так не получится).
      Из опубликованных было 6 игр на яндексе, но сейчас все они сняты с публикации (и хорошо, за большую часть из них мне сейчас стыдно...) из-за низкого рейтинга. Пару из них я планирую в ближайшее время оживить.


  1. d4nilevi4
    22.10.2025 07:04

    По моему опыту ScriptableObject лучше не использовать для хранения прогресса и не изменять его в рантайме, а относиться к ним как к конфигам, статическим данным. Прогресс лучше хранить в другом месте, как вариант в PlayerPrefs. Так же в Unity вместо стандартного класса Task, лучше пользоваться пакетом UniTask, у них есть интеграция с движком и минимум аллокаций.


    1. Wicort Автор
      22.10.2025 07:04

      Я не храню в ScriptableObject прогресс. Как и писал, использую их для задания настроек и конфигураций. Я написал, что можно менять их в рантайме, но делать этого не рекомендую )


  1. max-daniels
    22.10.2025 07:04

    Если вам за 30, 40, 50, и у вас в голове зажегся тот самый “огонек” - не гасите его. 

    Если только у тебя есть бабки как минимум на дизайнера - можешь сам делать игры. Иначе никому не нужен джун в 30 лет, не говоря уже о 40-50 лет. Всем нужен 20-летний сеньор с 10-летним стажем. В случае с инди, "огонек" потухнет, когда придет рутина и осознание того, что твоя игра никому нахрен не сдался, а ты корпел над ним целый год. Чтобы твоя игра стала прибыльной, надо корпеть 5 лет над 5 играми и тогда ты может получишь доход в "огромные" 10-100 тыс баксов.

    В корпоративном мире твой успех измеряется в KPI, ROI и выполненных спринтах. 

    В геймдеве тоже самое если работаешь на дядю.

    Я давно понял, что главный навык - не знание конкретного фреймворка, а умение находить и усваивать информацию. 

    Работодатель явно так не думает.

    В геймдеве (на моем уровне) успех - это момент, когда твой друг смеется от придуманной тобой глупой механики или когда ты сам получаешь удовольствие от геймплея, который создал. Это невероятно заряжает.

    Видно что ты пороха не нюхал.

    Геймдев - это когда сидишь с красными глазами в 3 часа ночи, пытаясь выявить и исправить баг, ибо завтра деплой. А он с*ка, проявляется только тогда, когда луна на фоне юпитера пролетает через марс!

    Геймдев - это когда 90% времени ты тратишь не на проработку интересного геймплея, а на исправление ошибок, на патчи, на унылое заполнение json'ок и уровней, на креши на айпаде(потому что эпл пожадничал и поставил 3гб озу в девайс с ретина-дисплеем), на тестирование в 100500 разных андроид девайсов.

    Геймдев - это нищие зарплаты и бесконечные кранчи. Пока твои коллеги ездят на машинах, ты ездишь на автобусе. Копишь на велик и радуешься, что экономишь деньги на автобус ездя на велике.

    Геймдев - это когда ты полтора года делаешь свою игру мечты, а она продается в количестве 10 штук(друзья купили из жалости). Ибо рынок перегрет хорошими качественными играми.

    Пробовали ли вы кардинально сменить фокус в зрелом возрасте?

    Пробовал из геймдева в другую сферу вкатиться, ибо геймдев в РФ сейчас мертвый. Смотрел в сторону Golang(web), типа как самая популярная вакансия в РФ. Начал было учить и охренел от объема знаний, которые надо изучить, чтобы тебя взяли на работу. Ладно бы только язык выучить, но там помимо языка надо учить кучу фреймворков! Видел курсы на полтора года! WAT? В геймдев я пошел почитав книжку типа "C++ для чайников" и прекрасно вкатился... Поэтому решил пока не выкатываться из геймдева...


    1. Wicort Автор
      22.10.2025 07:04

      Позиция вполне понятна, но у нас с тобой принципиально разные цели. У тебя всё упирается в "найти работу с достойной оплатой" - у меня есть работа, она мне нравится, мне не нужна вторая. Я просто начал заниматься тем, чем давно хотел где-то на подкорке мозга, но в чем совершенно не разбираюсь.
      По поводу багов в определенной фазе луны - ты даже не представляешь, сколько их было на моем почти 20-летнем пути. Поверь, такое бывает не только в геймдеве. Одни из самых веселых - это ошибки, возникающие только на продуктивных данных, доступа к которым у тебя нет и никогда не будет...


    1. VitalyZaborov
      22.10.2025 07:04

      Не стоит так сгущать краски. Геймдев - он разный. Кто-то не вылезает из кранчей, а кто-то за 5 лет перерабатывал недели две. Кто-то вкалывает в стартапе за обещания, а кто-то работает с 9 до 6 за вполне рыночную зарплату.

      Баги в ночь перед релизом есть в любой сфере, этим Вы на хабре вряд ли кого удивите. А в остальном - компании все разные, как и в любом IT.


  1. obviouslymilk
    22.10.2025 07:04

    Спасибо большое за мотивирующую и добрую статью!
    Было ли у вас чувство, начиная создавать игры, что вы делаете слишком мало и/или слишком просто? Если да, то как справлялись с этим и как выбирали масштабность первых игр?

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


    1. Wicort Автор
      22.10.2025 07:04

      Конечно, даже сейчас, спустя почти 2 года, каждый раз мне кажется, что я делаю недостаточно. Каждый раз мне кажется, что я делаю новую фичу слишком долго и можно сделать гораздо быстрее, но выё это решается опытом. У меня за плечами десятки, если не сотни начинаний что-то делать с нуля. И за счет всех этих начинаний я усвоил урок - ничто не получается быстро (если это не выигрышный лотерейный билет). Любая новая технология усваивается потом, кровью и объемом решенных задач. Так же усвоил, что нельзя придти и сходу сделать задачу "создать вселенную". Сначала простейшие задачи, только потом поэтапное усложнение.
      По поводу "идеально". Моё ИМХО - идеальной должна быть игра со стороны конечного игрока. Он должен играть в нее с удовольствием. Что под капотом - это вопрос второй и гораздо менее приоритетный. Сейчас я всегда сначала прототипирую - при этом на код смотреть зачастую страшно. А вот если сделанная фича мне нравится, то уже тогда я начинаю делать рефакторинг.


  1. kim006
    22.10.2025 07:04

    Из интересного есть еще Bevy, Fyrox (это все Rust) но там нужно страдать (движки еще очень сырые). Я сам полностью на Rust перешел c многолетней интерпрайз Java, это прям другой мир (в плане подходя к разработке). Кстати тоже Blender, Substance 3D Painter (в стиме его все еще можно купить), RizomUV, Marmoset Toolbag, Unreal, Unity, Godot смотрел - в качестве хобби, но руки так и не дошли что то серьезное сделать. Кстати в Unreal интегрирован Quixel Megascans (эпики пару лет назад купили компанию) - это огромны набор бесплатных ассетов - сканов с реального мира (с их нанитами неплохо работает), плюс в Fab к Unreal ежемесячно выкладывают бесплатные ассеты, также на гитхабе рядом с сорцами анрила есть плагины к Blender для экспорта рига и объектов, правда не знаю работают ли они еще с новыми версиями аррила


    1. Anarchist
      22.10.2025 07:04

      Лимит лайков исчерпан, так что извините, не могу лайкнуть. :) Я вот заинтересовался Bevy, так как Rust боиже к моему бекграунду (Scala).


  1. Jijiki
    22.10.2025 07:04

    лучше начать с 2д, 2д на самом деле проще, тайлики закешированные, на С++ действительно очень быстро достигается, тем более в сдл всё для этого есть, Юнити для этого монструозен, но всё в себе для этого имеет, далее, надо конкретно понять, а что дальше когда какой-то пазл будет архитектурно и визуально допилен и играбелен. Допустим это 3д, и тут к сожалению даже с движком путь большой, от математики и оптимизации до фильтров hdr с тенями(дефолт сцена в Юнити и анриале уже имеет шаблон, хорошо бы понять этот шаблон по-лучше) и анимациями и попутными механиками, я даже не знаю что посоветовать, могу только пожелать успехов, не забывайте о деревьях и о нелинейной обработке данных и распреденной памяти )

    вообще могу посоветовать, но знаю что лучше набивать шишки самому, упор на физику и математику в купе с деревьями даст буст до механик, плюс можно будет смотреть в сторону рейтрейса

    ну а так конечно пофиг есть движок впринципе наверно и без этого всего можно сделать игру, что-то в движке уже решено, например дерево и физика твёрдого тела, пуск луча и тп

    можно начать с бильярда, пин-бола ), сложные сцены я вот смотрю Adorable Adventures ну и как бы понимаю в соло сложно )


  1. Starche
    22.10.2025 07:04

    О, у меня чего-то очень близкое недавно произошло. Я тоже с хорошим Job Title на хорошей зп, и тоже вдруг захотел игры пилить. Только учить другой язык мне стало лень, а на работе у меня только python и rust, поэтому я взял rust биндинги к godot. За два месяца запилил небольшой 2д пазл без графики и без звука, выложил на itch.io, получил около 100 игроков и десяток комментов с фидбеком. От комментов вдохновился, похоже у меня получается геймдизайн. Так что в свободное от работы время я теперь пытаюсь рисовать учиться. А точнее, дорисовывать за нейросетками. Может когда-то сделаю что-то стоящее стима.


    1. Wicort Автор
      22.10.2025 07:04

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