5 жестоких уроков, которые мне пришлось получить от Unreal Engine

Прелюдия

2 года назад я начал разработку своего рогалика Alien Survivors о чём можно прочитать тут.

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

1. Spawn actor from class - это то что ты не захочешь делать в игре постоянно.

5 жестоких уроков, которые мне пришлось получить от Unreal Engine

К сожалению создание акторов в рантайме крайне медленный процесс и наверное игры каких-то жанров могут себе это позволить без проблем, но если у вас 3д рогалик или любой другой жанр где вам нужно часто и много создавать множество различных объектов, то вы не можете себе позволить делать это таким образом.

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

2. Enum конечен.

5 жестоких уроков, которые мне пришлось получить от Unreal Engine

Пожалуй, это самый п***ый прикол о котором я хотел бы знать заранее.

В какой-то момент я решил, что делать различные статы на enum это очень удобно. Мой вам совет - никогда так не делайте. Во-первых, enum вещь довольно статичная и править/изменять её достаточно неудобно, поэтому она прекрасно работает, для небольших списков, которые редко будут меняться в процессе разработки. Во-вторых, в enum в Unreal Engine можно добавить максимально 256 элементов.

Представьте моё удивления, когда я находясь в потоке, с пеной у рта добавляя новые статы, в какой-то момент понимаю, что они перестали добавляться в список.

Пришлось брать заднюю и переделывать кучу всего с enum на name.

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

3. Сетапить локализацию надо было с самого начала.

Я отнесся к вопросу локализации крайне небрежно. Большую часть времени, я думал, что когда придёт момент, я просто всё красиво локализую парой кликов и всё будет работать нормально.

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

Однако не исключаю, что я всё ещё нихрена не понимаю в локализации и есть какие-то правильные способы это всё сетапить...

4. Структуры это ван лав, но пипец, как бесят.

5 жестоких уроков, которые мне пришлось получить от Unreal Engine

Хотел бы я знать о структурах на момент начала работы, а ещё больше хотел бы знать о специфики работы с ними. Когда перед первой паковкой билда выяснилось, что у меня три миллиарда карапченых принтов и мне пришлось руками их все перекомпилировать и пересохранять, я был сильно удру(о)чен.

Много времени ушло, чтобы понять, откуда берутся проблемы и как их избегать. Теперь это уже не выглядит таким ужасом, как когда-то но всё равно.

Если кто не в курсе, то при изменение структуры UE пытается обновить все пины во всех принтах, где использует эта структура, но не может сделать это нормально, поэтому все принты оказываются карапчеными и в них нужно обновить все ноды ручками и пересохранить. Очень хочу верить, что в новых версиях движка это пофикшено, но в 5.2 это к сожалению работает так.

5. Если что-то работает в движке - не факт , что оно будет работать в билде.

К сожалению если вы без проблем запускаетесь в проекте, то это ещё не означает, что в вашем билде всё взлетит и будет шоколадно.

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

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

Заключение

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

Некоторые проблемы решались путём поиска в интернете, некоторые приходилсь додумывать самостоятельно...

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

Всем добра, лёгкой разработки и побольше продаж.

Не забывайте подписываться на наш Discord и Telegram, чтобы поддержать нас и следить за будущими новостями.

13
1
1
1