🎮⛰️ Дорожная карта Unity-разработчика 2025: с нуля до джуна
Подробная и актуальная на 2025-й год дорожная карта со всеми знаниями, необходимыми для начинающего Unity-разработчика. От основ C# до работы с физикой и сторонними SDK. В конце статьи — полезные ссылки и рекомендации от автора!
1. Основы C#
Самое важное для любого разработчика – научиться писать на целевом языке. В случае с Unity-разработкой таким языком является C#.
C# — объектно-ориентированный язык общего назначения, разработанный Microsoft. Он активно используется в бэкенд-разработке, десктоп-разработке и геймдеве. Помимо этого на C# можно разрабатывать мобильные приложения и даже заниматься машинным обучением, но нас это не интересует. Все внимание мы уделим именно разработке игр.
Небольшой дисклеймер по поводу визуального программирования:
- Да, вы можете разрабатывать игры на Unity без (или практически без) кода. Unity поддерживает визуальный скриптинг и имеет несколько библиотек, которые позволяют разрабатывать логику в визуальных редакторах.
- Нет, визуальный скриптинг не является полноценной заменой C#, так как имеет ряд ограничений и сложен в поддержке. Не зная языка программирования, вы не сможете устроиться на работу, коммерческие компании практически не используют визуальное программирование в Unity.
С этим разобрались, теперь перейдем к C#
1.1. Знакомство с языком и базовый синтаксис
- Переменные и типы данных
В C# существует несколько базовых типов (int, float, bool, string, char и т. д.). Важно понять разницу между типами-значениями (Value Types) и типами-ссылками (Reference Types). Где они хранятся, как к ним обеспечивается доступ.
- Операторы
Арифметические операторы (+, -, *, /, %), логические (&&, ||, !), операторы сравнения (==, !=, >, < и т. д.) и операторы присваивания (=, +=, -= и т. д.).
- Управляющие конструкции
if/else, switch/case, циклы (for, while, do-while, foreach). Здесь закладываются основы логики, которые впоследствии пригодятся при создании игровой логики.
На этом этапе вы уже освоили базовый синтаксис, научились компилировать небольшие консольные программы и понимать, как код на C# превращается в исполняемую программу. Хорошим первым проектом может стать консольный калькулятор, который позволит выполнять базовые математические операции с числами, которые вводит пользователь.
1.2. Методы
На этом этапе надо разобраться, что из себя представляют методы, зачем они вообще нужны.
Что такое сигнатура метода, принимаемые в метод аргументы (в том числе и необязательные), возвращаемые значения. Понятие рекурсии. Модификаторы ref и out, зачем нужны и чем друг от друга отличаются. Для их понимания очень важно разбираться в типах данных.
1.3. Объектно-ориентированное программирование (ООП)
ООП — основа при работе в Unity, без него никуда даже в проектах, написанных на ECS (Entity Component System). Здесь мы не будем рассматривать этот паттерн, он заслуживает отдельной статьи (или даже серии статей).
Для того, чтобы разобраться в ООП, надо понять саму концепцию этого подхода, что такое классы и объекты, зачем они нужны и как они взаимодействуют между собой.
Далее вам следует изучить три столпа ООП:
- Наследование
Абстрактные классы, отношения родительских и дочерних классов, абстрактные и виртуальные методы, модификатор доступа protected.
- Полиморфизм
Виртуальные, абстрактные и sealed методы, переопределение методов в дочерних классах, перегрузка методов.
- Инкапсуляция
Сокрытие деталей реализации, модификатор доступа private, использование свойств, что такое интерфейсы и зачем они нужны.
Также отдельно часто выделяют абстракцию, с ней вы тоже столкнетесь.
Очень важно разобраться с интерфейсами, что в них может быть, чем отличаются от абстрактных классов и зачем их вообще используют. Без практики это может быть достаточно сложно, поэтому придется много кодить.
1.4. Коллекции и работа с данными
Знать принципы работы и внутренне устройство, уметь работать и понимать разницу следующих коллекций:
- Массивы (Array)
- Списки и динамические массивы (List)
- Словари (Dictionary)
- Множества (HashSet)
- Очереди (Queue)
- Стеки (Stack)
Также важно уметь работать с LINQ (Language Integrated Query), так как это мощнейший и невероятно удобный инструмент для работы с данными, который можно встретить практически на каждом проекте.
1.5. Структуры
Какой тип данных, где хранятся, чем отличаются от классов, в каких ситуациях лучше использовать их, а в каких – классы. Также почитайте про подводные камни при их использовании и различные ограничения.
1.6. Делегаты, события, лямбда-выражения
- Делегаты
Типы, которые указывают на методы. Позволяют вызывать метод через переменную. Важно понять, как они работают и в каких ситуациях используются, зачем нужны обертки над делегатами Action и Func, в чем их отличия.
- События (Events)
Расширение делегатов, ключевое слово event, используется для подписки и отписки на определенные действия, очень распространены в разработке игр, так что must-have для изучения и понимания.
- Лямбда-выражения
Анонимные функции часто используются в связке с LINQ и событиями
1.7. Исключения и их обработка
Блоки try, catch, finally.
Когда какой блок вызывается, зачем нужны, как правильно отлавливать исключения.
1.8. SOLID
- Single Responsibility – принцип единой ответственности
- Open-Closed – принцип открытость закрытости
- Liskov Substituition – принцип подстановки Барбары Лисков
- Interface Segregation – принцип разделения интерфейсов
- Dependency Inversion – принцип инверсии зависимостей
Знать определения принципов будет недостаточно. Надо уметь привести примеры из разработки, где вы применяли эти принципы, объяснять их важность, понимать, когда идеально след��вать этим принципам невозможно и что с этим делать.
1.9. Паттерны проектирования
Нужно знать определения и назначение самых популярных паттернов, их плюсы и минусы, уметь реализовывать в коде и на словах. Я могу выделить следующие паттерны:
- Observer* и его встроенная реализация в C# через события
- State* (сюда же Finite State Machine и Hierarchical FSM) и его использование в управлении как глобальным состоянием игры, так и более локальными вещами (в частности, искусственный интеллект)
- Service Locator* и Dependency Injection*, в каких ситуациях использовать тот или другой
- MVC*, MVP*, MVVM для работы с UI
- Object Pool*
- Entry Point*
- Abstract Factory, Factory Method
- Visitor
- Command
- Strategy
- Decorator
- Facade
Символом * отмечены те паттерны, которые (на мой субъективный взгляд) чаще других встречаются как в реальных проектах, так и на собеседованиях.
Помимо всего вышеперечисленного стоит получить базовые знания об асинхронности (и ее реализации через UniTask) и обобщениях (Generics).
2. Работа в Unity
После освоения языка программирования нужно переходить к изучению игрового движка. Впрочем, этим можно (и даже желательно) заниматься и параллельно изучению C#. На каком именно этапе впервые открывать Unity — решать вам. Я бы посоветовал сразу после изучения ООП.
2.1. Архитектура Unity
На этом этапе вам надо ознакомиться с базовыми инструментами и концепциями движка:
- Сцена (Scene) — файл, содержащий игровую локацию. В сцене размещаются объекты, из которых состоит игра
- Рабочее окружение (Inspector, Console, Project, Hierachy, Game) — это основные окна в движке, с которыми вы будете взаимодействовать ежедневно
- GameObject — базовый объект в Unity, на который навешиваются компоненты
- Компоненты (Components) — скрипты, физические коллайдеры, рендереры, аудиоисточники и т. д. — все, что дает функциональность GameObject’ам
- MonoBehaviour — базовый класс для всех скриптов, которые могут быть прикреплены к GameObject, предоставляет доступ к методам жизненного цикла игрового объекта
Также рекомендую сразу привыкнуть к правильному размещению файлов в проекте, выработать удобную структуру папок и придерживаться ей. Это облегчит вам жизнь и позволит в будущем выглядеть более профессионально в глазах интервьюеров и коллег.
2.2. Программирование в контексте Unity, работа с Unity API
Далее вам следует начать разрабатывать свою первую игру! На этом этапе вы познакомитесь с важнейшими аспектами программирования в движке:
- Методы жизненного цикла игровых сущностей
Изучите методы Awake, Start, OnEnable, Update, FixedUpdate, LateUpdate, OnDisable, OnDestroy. Вам надо знать порядок их вызова, для чего они используются и какую логику в них стоит размещать.
- Система ввода
Надо уметь работать со старой и новой системами ввода, уметь подключать управление для клавиатур, геймпадов и мобильных устройств.
- Корутины
Очень важный инструмент, который вы станете часто встречать в будущем. Нужно знать, как они работают, зачем используются и какие нюансы следует учитывать при работе с ними.
- Scriptable Objects
Что это такое, для чего используются (а для чего использовать не рекомендуется), какой имеют жизненный цикл, какие у этого инструмента есть плюсы и минусы
- PlayerPrefs
Те же самые требования к пониманию инструмента и области его использования
- Системы сохранений
Для начала хватит сохранений в JSON, шифрования, дешифрования файла и привязки прогресса в SDK конкретных платформ (обсудим это далее)
2.3. Физика
В игровом движке от физики никуда не убежишь. Вам надо будет знать, как работать с разными коллайдерами, Rigidbody, физическими слоями и физическими материалами.
Нужно будет уметь работать с методами, вызываемыми при физических взаимодействиях игровых объектов (OnCollisionEnter, OnTriggerEnter и т.д.).
Сюда же следует отнести работу с лучами и их пробрасыванием (Raycast). Что это, для чего используется, какие варианты рейкастов существуют, что такое LayerMask.
2.4. Визуал и звук
В этот раздел я бы хотел отнести достаточно широкий спектр инструментов в движке, которые непосредственно связаны с тем, что и как будет видеть и слышать игрок:
- Камера
Отличия ортографической и перспективной камеры, стек камер, настройки рендеринга.
- Освещение
Global Light, Area Light, Spot Light, виды освещения, запекание света, тени и способы оптимизации всего этого безобразия. Все на базовом уровне.
- 3D-модели, текстуры и спрайты
Что это такое, какие настройки импорта в проект стоит использовать, как правильно экспортировать модели из 3D-редакторов (такое тоже может потребоваться), какие виды текстур и спрайтов есть и для чего они нужны, как, в конце концов, порезать атлас спрайтов со всей покадровой анимацией персонажа на отдельные картинки.
- Звук
Что такое Audio Source и как его настраивать в зависимости от конкретных требований, как правильно импортировать звуки в проект, как их проигрывать, что такое Audio Mixer и зачем он нужен.
- Анимации
Как вообще работают и из чего состоят анимации в Unity: Animator, State Machine, Layers, Blend Tree, Transitions, Conditions, Animation Clips. Также надо будет знать, как из анимаций вызывать код и из кода проигрывать различные анимации.
- Эффекты
Поначалу не так важно, но все же знать о существовании Particle System и Trail Renderer, а также их назначении, стоит.
- Материалы и шейдеры
Хватит базовых знаний на уровне создания материала, осведомленности об основных крутилках и присвоении его игровым объектам
2.5. Работа с ресурсами
Не менее важный аспект, так как для успешной разработки игр очень важно грамотно работать с ресурсами.
- Папка Resources
Что это, зачем используется, какие плюсы и минусы
- Asset Bundles и Addressables
Чем отличаются друг от друга и от папки Resources, в чем их преимущество. Надо иметь базовые навыки работы с Addressables. Asset Bundles сейчас гораздо менее популярны, так что о них можно будет просто знать.
- Prefabs
Что это, зачем нужны, что такое Prefab Variant
Здесь же вспомним о системе сохранений и PlayerPrefs. Надо знать, как данные (например, файл с сохранением) загружаются и куда они сохраняются, как их можно хранить в облаке и где лежат PlayerPrefs.
2.6. User Interface (UI)
Также достаточно обширная тема. Здесь вы должны знать обо всех основных кирпичиках, из которых строится пользовательский интерфейс в Unity: Canvas, RectTransform, Image, Button, Layout Groups, Slider, Toggle, TextMeshPro и так далее.
Нужны навыки адаптивной верстки под экраны с разным соотношением сторон и достаточно глубокое понимание настроек, которые нам предоставляют UI-компоненты в Unity.
И не забываем про оптимизацию UI!
2.7. Сторонние SDK
Без подключения и настройки сторонних SDK не создать ни одной серьезной игры, так что вам надо будет научиться на базовом уровне работать с такими инструментами как Firebase, Unity Services, IAP, SDK разных магазинов.
2.8. Dependecy Injection (DI)
Теперь даже джуну без знания DI никуда. Надо будет понимать общую концепцию и смысл инъекции зависимостей, а также владеть хотя бы одним популярным фреймворком на базовом уровне (уметь создать инсталлер и прокинуть зависимость). Я лично рекомендую Zenject, так как он наиболее популярен.
2.9. Базовые навыки оптимизации
Как сжать размер сборки, как правильно импортировать файлы в проект, как оптимизировать UI и вызова какого кода в Update следует избегать — все эти знания также необходимы.
2.10. Дополнительные аспекты
Дополнительно ко всему вышеперечисленному я бы рекомендовал ознакомиться с библиотекой DOTween (очень популярный инструмент для анимаций UI и плавного изменения каких-либо значений) и возможностями написания своих расширений для Editor.
Еще было бы здорово, пусть и не необходимо, если бы у вас появился опыт завершения проекта и размещения где-нибудь. Пусть это будет даже не Google Play или App Store, хватит itch.io или Яндекс.Игр.
3. Итоги
Выглядит страшно, не правда ли? Столько всего нужно изучить, чтобы найти первую работу...
И действительно, выучить придется много. Тем не менее, я хочу выделить две важные мысли:
Во-первых, если вы действительно хотите разрабатывать игры, вы справитесь. Причем, скорее всего, даже быстрее, чем сами того ожидаете. При разработке двух-трех небольших учебных проектов все вышеперечисленные темы затрагиваются на необходимом уровне.
Во-вторых, вовсе не обязательно знать идеально все это, чтобы начинать искать работу. Вы можете выходить на рынок в тот момент, когда почувствуете в себе уверенность. Откликайтесь, ходите на собеседования, получайте отказы (или приглашения), набивайте шишки, становитесь круче и снова ходите на собеседования. Нет смысла месяцами сидеть над одной душной темой и пытаться вызубрить ее до идеального состояния. Вам нужно знать все эти темы ровно на том уровне, на котором их спрашивают на собеседованиях. И нет лучшего способа узнать этот уровень кроме как самостоятельного похода на эти самые собеседования. Не сидите за учебой дольше трех-четырех месяцев. Чем раньше начнете ходить по собеседованиям — тем быстрее устроитесь на первую работу. А уж там ваш рост будет экспоненциальным.
4. Полезные ссылки
И бонусом хочу оставить несколько классных бесплатных ресурсов, которые я рекомендую использовать при обучении:
- Metanit — база по C#
- #SimpleCode — база по C# в видеоформате
- K-Syndicate — высочайший уровень кода и много бесплатных материалов
- Илья Яковлев — классный канал с большим количеством гайдов по разработке игр на Unity
- Code Monkey — достаточно низкий уровень кода, но зато есть множество уроков по разработке самых разных механик, хорошо использовать как вдохновение. Англоязычный канал.
- git-amend — еще один англоязычный канал, но с контентом более высокого уровня
- Официальный гайд от Unity по архитектуре игр с возможностью скачать книжку
Становись частью сообщества Unity-разработчиков: