Добавить в корзинуПозвонить
Найти в Дзене

0. Вступление

Привет всем! Начнем с вступления, что здесь и почему. Несколько лет назад я начал разрабатывать игру как независимый разработчик, так исполнилась одна из мечт детства. Надо сказать, что на момент старта у меня уже был опыт коммерческой разработки (уровень tech lead по серверной Java), поэтому выбор пал на движок Unity. В Unity игры пишутся на C#, который я более менее знал и по синтаксису и по модели исполнения (VM, Garbage Collector, модель памяти, прочее). Однако очень скоро стало ясно, что с Unity мне не по пути, и в общем то никуда не деться, кроме как выучить C++ и писать под Unreal Engine. На тот момент я мог читать код на C++, но опыт разработки отсутствовал совсем. Пришлось изучать, пробовать, читать, опять пробовать. Затем родилась мысль опубликовать полученные знания и умения, чтобы и вы могли писать игры под крутейший движок Unreal Engine. При некотором усердии можно освоить разработку игр на C++ практически с нуля, не нужно бояться. Итак, что здесь будет: Почему C++, а не
Оглавление

Привет всем!

Начнем с вступления, что здесь и почему.

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

Надо сказать, что на момент старта у меня уже был опыт коммерческой разработки (уровень tech lead по серверной Java), поэтому выбор пал на движок Unity. В Unity игры пишутся на C#, который я более менее знал и по синтаксису и по модели исполнения (VM, Garbage Collector, модель памяти, прочее).

Однако очень скоро стало ясно, что с Unity мне не по пути, и в общем то никуда не деться, кроме как выучить C++ и писать под Unreal Engine.

На тот момент я мог читать код на C++, но опыт разработки отсутствовал совсем. Пришлось изучать, пробовать, читать, опять пробовать.

Затем родилась мысль опубликовать полученные знания и умения, чтобы и вы могли писать игры под крутейший движок Unreal Engine. При некотором усердии можно освоить разработку игр на C++ практически с нуля, не нужно бояться.

Итак, что здесь будет:

  • базовый курс C++ под Unreal Engine
  • практические советы
  • изучение исходного кода движка
  • работа с памятью, устройство рендеринга и другие фишки внутренностей Unreal Engine

Почему C++, а не Blueprints?

По мнению опытных разработчиков (форумы, Discord Эпиков и местные чаты), и я полностью согласен, Blueprints подходит только для прототипирования игровой логики и написания мелких локальных эффектов. Основную игровую логику надо писать на плюсах, покрывать тестами, документацией, проводить code review. Иначе ваш Blueprint-код очень быстро станет мешать вам развиваться.

Говорят, в Unreal Engine не совсем C++

Говорят правду. Нет, конечно код - синтаксически и семантически корректный C++, который при некотором усердии можно скомпилировать без всяких UBT.

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

1. Своя модель работы с памятью. В Unreal Engine автоматическое управление памятью, основанное на подсчете ссылок и Garbage Collection. По сути это и есть Java/C#. Надо заметить, что GC в Unreal Engine достаточно кондовый. Модель работы GC в языках, где он был изначально, шагнула далеко за последние 20 лет.

2. Из п.1 выходит отсутствие типичных приемов по работе с памятью (владение, RAII, ...)

3. Своя модель жизненного цикла объектов. Конструкторы не работают (вернее работают конечно, но совершенно не так, как вы бы этого ожидали). Наличие CDO - дефолтного объекта каждого класса.

4. Свои приколы с наследованием. Своеобразные интерфейсы.

5. Своя интроспекция. Сделана хорошо, лично мне нравится.

6. Стандартная библиотека не используется вообще

7. Ну и последнее, но тоже важное. Своя система модульности, динамической загрузки, сборки.

В целом мне как Java-разработчику оказалось очень комфортно, по большому счету в первом приближении ты пишешь в парадигме управлемых языков с синтаксисом C++. Отличия конечно есть, особенно когда пишешь под редактор, а не игровую логику (там всё совсем не так) или спускаешься в ренрединг.

Что нужно знать, чтобы начать?

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