Mealtris

Mealtris

На Пикабу
3246 рейтинг 815 подписчиков 20 подписок 7 постов 3 в горячем
Награды:
10 лет на Пикабу
168

Unreal Engine 4. Разработка 3D / VR Игр №3. Прокачиваем персонажа. Blend space, Aim Offset, Animation BP.

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

В этом уроке мы поговорим про Animation Blueprint и Blandspace в Unreal Engine 4! О том, как это все организовано, как работает и попробуем сделать на основе того, что мы нашли в прошлом уроке, анимационный блюпринт для нашего персонажа.


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


Начнем текстовые разъяснения по тому же порядку, что и в видео.


BLEND SPACE.

Собственно, зачем он нужен и что он делает.
Blendspace используется в анимационном блюпринте для воспроизведения анимаций. В нем имеются две оси значений, в точки которой вставляются некоторые анимации. Когда вы передаете в Blend Space эти два значения, он определяет какие анимации установлены рядом с полученной точкой, комбинирует и воспроизводит их с разной скоростью. Так, например, можно установить только одну ось, на которой можно расположить только две анимации - бездействие и бег. Изменяя переменную скорости, можно будет увидеть, как моделька начинает разбегаться.

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

В шутерах мы все же должны иметь возможность прицеливаться, ну и выглядеть это должно нормально, т.е. чтобы моделька персонажа тоже прицеливалась, верно? Для этого нам нужно сделать AIM OFFSET (смещение прицела), что UE4 тоже позволяет.

AIM OFFSET.

AIM Offset работает так же, как и Blend Space, описанный выше, но с парой отличий. Blend Space комбинирует анимации, а здесь мы уже работает с позами. По факту, сами позы - это анимации из одного кадра, но просто из blend space Aim offset не сделаешь так, чтобы воспроизводилась и анимация бега, и менялась поза для прицеливания.

Что он делает? Мы так же задаем две оси значений - поворот и наклон (Yaw и Pitch), исходя из которых, Aim offset будет комбинировать заданные в нем позы. В нашем случае, мы взяли пятнадцать поз для пятнадцати основных комбинаций наклона и поворота.
Обычно эти смещения все называют одинаково, расшифруем это дело, чтобы было понятнее в видео.

AO - Aim Offset

R - Right

L - Left

U - Up

D - Down

C - Center

B - Back
Исходя из этого, AO_RBU расшифровывается как Aim Offset_ Right Back Up, т.е. Смещение прицела через правое плече назад и смотреть вверх. Как то так.

Yaw (Поворот) у нас принимает значения от -180 до 180.
Pitch (Наклон) принимает значения от -90 до 90.
Итого, мы имеем вот такую карту расположения поз:
LBU  LU  CU  RU  RBU
LBC  LC  CC  RC  RBC

LBD  LD  CD  RD  RBD


И гвоздь нашей программы, работа с которым на видео длится дольше всего - Animation Blueprint

ANIMATION BLUEPRINT.

К этой штуке мы еще не раз будет возвращаться, т.к. в один урок все про него и не расскажешь, да и рановато. Вообще, сейчас мы его рассматриваем, т.к. первым делом следует сделать нам персонажа.
В общем, Animation BP. Это, в своем роде, контроллер для ваших анимаций. В нем есть event graph, с которым мы знакомились в первом уроке и animation graph, в котором, вместо привычных вычислений и функций, вы будете работать уже с позой, которая будет отрисовываться в конкретный кадр. На скриншоте, кстати, показан как раз граф анимации.

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

Нет, в этом видеоуроке будет не такая машинка, этот вариант мы разберем в следующем :) Вы задаете состояние, в котором воспроизводится конкретная анимация. Переход из текущего вперед или назад осуществляется тогда, когда выполнится условие, прописанное в линии графа.

Например, в нашем случае, мы изначально находимся в состоянии бездействия, во время которого воспроизводится соответствующая анимация. Если мы начинаем двигаться, у нас изменяется скорость, что вызывает переход в новое состояние, в котором у нас воспроизводится наш Blend space. Когда мы прекратим перемещение, скорость станет равной нулю, что вызовет переход в состояние бездействия.

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


Если посмотреть на скриншот анимационного графа, можно заметить, что там есть блок в самом конце, называемый "Slot". Он как раз и используется для подобных задач. В коде вы можете запустить воспроизведение монтажной анимации, которая как раз ставится в этот слот. Анимационный блюпринт как бы пропускает то, что у него получилось через этот слот, захватывая монтажную анимацию, которую вы начали воспроизводить из кода, что приведет к ее воспроизведению. В монтажках можно ставить звуки на конкретный кадр анимации, объединять несколько анимаций в одну, ставить различные эффекты и т.д. Подробнее про это будет в следующих уроках.

Анимационный блюпринт устанавливается в настройках у меша (модели) персонажа.

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

Чтобы вам было приятнее смотреть это видео, я свел парочку Luquid Funk D&B треков, так что не только приятного просмотра, но и приятного прослушивания) Треклист находится в описании к видео.

Примерно вот так вот работается с анимациями в UE4. Мы еще не раз к ним будем возвращаться, ведь это далеко не все, что там нам предстоит сделать :)

В следующем уроке мы продолжим развивать анимационный блюпринт персонажа и может посмотрим, как в движке дела обстоят по работе со звуками. Все ближе и ближе подбираются к нам уроки по C++, а пока ковыряем персонажа.

Конечно же, ГУГЛОДИСКОССЫЛКА на проект. Я туда еще добавил некоторые анимации из следующего урока, чтобы вы смогли сразу и сами попробовать что то сделать в следующий раз, скачав этот проект, не бегая по моим наводкам в магазине у эпиков.

Кстати, предлагайте свои идеи по концепции игры, чтобы получилось более интересно! Пока мы делаем фундамент, это не критично, но скоро уже нужно будет этот момент продумать.
Идеи поведения врагов, где происходят события, механика и т.д. Сделаем проект вместе)


Спасибо, что дочитали до конца и до новых встреч!

Показать полностью 5 1
59

Unreal Engine 4. Разработка 3D / VR Игр №2. Введение в UE4 ч.2. Состав проекта, полезные фитчи.

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

Для начала ответим на пару вопросов.

Какие-никакие основы программирования нужны. Все же я буду рассказывать про работу с движком, примеры будут подробные и будут исходники, по которым вполне можно разобраться со всем. Если у вас не все плохо с логикой и алгоритмизацией, в плане продумывания решений какой-либо проблемы, и вы можете предугадывать какие то важные события, которые нужно обязательно учитывать, а еще у вас не все плохо с математикой, тогда еще есть шансы зацепиться за что то и научиться) Нужно больше практики. Да мы и не пишем на чистом C++, а используем SDK движка.

Тут очень интересно. Как я писал ранее, BP - очень мощный инструмент. Вообще, BP использует функции, написанные на C++, которые, кстати, довольно легко найти, если покопаться в движке (об этом будет в этом посте). На самом то деле, мы пишем не на чистом C++, а используем его синтаксис, разные особенности, используя SDK движка. Ну где вы видели, например, класс Character или структуру FRotator в чистом C++? Собственно, в BP реализовали циклы, математические операции, функции, переменные и разное прочее, привязав SDK движка, чтобы можно было обходиться без Visual Studio. Даже если вам не хватает того функционала, что идет телегой с движком, вы всегда можете написать свой плагин для движка (над чем я и потел, что так долго не выпускал пост) на C++, в который можно вкрутить свои библиотеки и код на чистом C++ и настроить все так, чтобы движок видел все функции и предоставлял их использование в редакторе BP.  Тут уже дело удобства. Просто, как я, опять же, писал ранее, BP может разрастись в не хилую паутину, в которой будет уже довольно трудно разобраться. BP можно раскидать по функциям, которые тоже создаются в BP. Но есть некоторые задачи, которые не очень удобно решаются (или вообще не решаются) использованием BP. Серьезно, это очень мощный инструмент и при работе с этим движком вы никуда не денетесь от использования BP.

И самый частый вопрос: "Как с тобой связаться?". 
Долго я не отвечал на эти вопросы, ибо не понимаю чем не устраивает вас пикабу? Ведь тут можно задать вопрос, на который я отвечу либо постом либо комментарием и все смогут увидеть решение той проблемы, с которой вы столкнулись. Работу я имею, уходить никуда не собираюсь в ближайшее время. Ну нравится мне коллектив и проекты, над которыми я работаю. Да и куда то уехать из города я пока не имею возможности т.к. через пару месяцев у меня защита, а потом магистратура и т.д. и т.п. По текущему проекту и реализации того, над чем я сейчас работаю, я отвечать не буду, т.к. это глупо сливать информацию третьим лицам. Я выкладываю проекту на своем гуглодиске, переходя по которой вы видите почту владельца этого диска. Вот на эту почту (mealtris@gmail.com ага, сложно было догадаться:) ) и можете задавать вопросы, она рабочая.

Ну и раз начали мы с BP, так и продолжим с BP.
Дополним ответ на вопрос выше. Я тут почитал особенности UE 4.11, который сейчас готовят к выпуску и там может появиться конвертер BP в C++ код! Но конвертация происходит на этапе финальной сборки проекта. Все-равно, круто же?

Это еще один пруф к тому, что обойтись без C++, если достаточно функционала движка и не требуется написание своих плагинов, и использования своих библиотек, вполне можно, но если вы хотите получать данные из какого то стороннего софта или подцепить к движку какое то устройство, с которым он не умеет работать, и нет плагина для него, тогда увы. Про плагины поговорим позже.
Стоит дополнить мой предыдущий пост, в котором я благополучно забыл скачать, что если вы будете работать совместно с движком, пользуясь гитом, но не будете использовать C++, тогда при возникновении конфликтов слияния (оба человека изменили один и тот же файл), вы не сможете его разрешить объединением локального и удаленного варианта, а сможете или заменить конфликтующий файл своим, или удалить свой, взяв удаленный.
В общем, про BP и С++ можно спорить еще очень много и долго, но тут мы будем использовать и то, и другое :)
Вообще, BPидеальны для того, чтобы протестировать работу какого-то вашего алгоритма перед написанием его на C++ из-за скорости их компилляции, чем C++ похвастаться не может, отчасти из-за того, что еще идет пересборка редактора, когда вы добавляете новые функции в своих классах. Вот ситуация - вы проверили алгоритм, вам он подходит, но, когда вы начали переносить его в C++, вы не можете найти там те функции, которые вы использовали в BP. Об этом сейчас и поговорим.

Как искать функции BP, которые вы не нашли в C++.
Это происходит, т.к. не подключена та или иная библиотека. Возьмем простенький пример. Вам потребовалось найти длину вектора, но вы, вводя название той функции, не находите ее. Просто вы пытаетесь ее найти в родительском или своем текущем классе, а она находится в сторонней библиотеке, подключенной к движку, но не к вашему классу! 
Если навести на блок BP, в появившемся описании последней строчкой будет название библиотеки.

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

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

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

Как я удачно выбрал функцию для примера) Если мы попробуем ввести VectorLength, то такой функции в только что подключенной библиотеке мы не найдем. Просто она называется по другому, но она там есть. Просто при создании BP функций можно задавать другое название, которое будет отображаться в редакторе BP. В этих случаях нам нужно нажать правой кнопкой по названию нашей библиотеки и перейти к определению.

У вас откроется хэдер файл данной библиотеки, в котором нужно выполнить поиск нашей функции. Просто введите в поиск часть описания функции, которое появляется в BP при наведении мыши на блок и все, вы находите нужною вам функцию.

После чего спокойно используете ее.

Пора все же перейти к следующей части поста. 
Состав проекта.
Если вы зайдете в папку с проектом, вы увидите следующее:

Давайте рассмотрим его составные части.

В папке Content у нас хранится весь контент проекта. Там и графика, и анимации, и уровни, там же хранятся и BP классы. В общем, это самая увесистая папка проекта, которая, кстати, полностью состоит из .uasset файлов, представляющих собой бинарники, которые воспринимаются нашим движком уже как модели, анимации, звуки и т.д.

Вообще, .uasset содержит оригинал вашего файла и пути ко всем связанным с этим ассетом ассеты. Т.е при при перемещении ассета того же оружия, путь к которому хранится в ассете персонажа, не используя движок, а перемещая это жестко из папки, то ассет персонажа потеряет оружие, а движок выведет кучу ошибок по поводу того, что по такому то пути нет ассета с таким то именем. Т.е. перемещение нужно делать используя движок в контент браузере.
В папке Config хранятся настройки проекта и движка для этого проекта. 
В папке Source хранятся исходники классов, написанных нами от нашего проекта.
Pikabu.uproject - это уже файл проекта, который хранит какие сторонние плагины и модули подключены для использования в проекте, требуемую версию движка, версию и т.д.

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


Ну стоит добавить, что собранный .exe файл проекта будет находиться по пути .../Saved/StagedBuilds. 

В случае с гитом, целесообразно отслеживать только файл проекта и папки source и config, т.к. изменения в остальных файлах не будут индексироваться. А тот же контент можно хранить на вашем сервере или любом облаке с автосинхронизацией и т.д.

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

Миграция.
Для начала найдем нам модельку, которая будет в бесплатном доступе и за которую мне не настучат по голове :D Благо, как отмечали в комментариях, есть у эпиков человек, который рассказывает о движке и заливает примеры работы с движком.
Зайдите в EpicLauncher (который, кстати, на русский перевели) и перейдите во вкладку "Узнать/Learn", а там найдите проект "ContentExamples".
Кстати, в этом же разделе можно взять себе разные крутые и красивые демо-проекты движка, которые показывают уровень графики и вообще того, что можно сделать в движке.
P.S. некоторые из них требовательны к сильным железкам. Они все рендерятся в реальном времени. В общем, это мультики, демонстрирующие функционал движка. 

Скачав этот проект, запускаем его и передаем привет компилятору шейдеров)
В этом проекте есть куча интересностей, к которым мы еще будем возвращаться, но позже. Считайте это отчасти сборником спойлеров.
В общем, сейчас нас интересует только модель человека, его материалы и пак анимаций к нему. Все из этого мы мигрируем в наш проект.
Что вообще такое миграция? Как я писал выше, в .uasset важно сохранять структуру проекта, чтобы связанные ассеты не потеряли друг друга. Например в одном анимационном ассете имеется путь к скелету, да и вообще, при импорте анимации в проект, вы должны указывать где у вас находится скелет от той модели, для которой она предназначена. В монтажной анимации вообще может быть несколько анимаций со звуками и системами частиц, в которых еще пути на материалы, текстуры и т.д. 
Открыв этот проект, вы же не знаете что с чем связано, а вот движок это все знает и может даже отобразить карту связей, если нажать правой кнопкой мыши по ассету и нажать на ReferenceViewer, после чего откроется вот такая вот штука.

В общем, что делает миграция? Миграция просматривает все эти связи и выявляет все ассеты, которые любым образом связаны с тем, который вы хотите мигрировать себе в проект, а затем копирует их к вам. Мигрировать можно в любую папку, но для использования, ее содержимое обязательно нужно перенести в корень вашей папки content.
Стоит отметить, что персонажа из какого-то проекта, который был написан на C++, вы мигрировать так, чтобы оно сразу же заработало в другом проекте, не сможете, т.к. миграция может работать только с BP объектами, а если BP наследован от C++ класса, которого изначально нет в движке и в вашем проекте, тогда он и работать не будет.

Нам нужна моделька персонажа, находим ее по пути из скриншота, жмем правой кнопкой, asset actions -> Migrate

С этой моделькой в наш проект переедут еще и все материалы от нее, скелет и физический ассет. Но анимации по умолчанию с моделькой не связаны. Их мигрируем так же, но уже кликом по папке Animations -> Migrate.
Кстати, в той папке, где была модель персонажа, еще есть моделька автомата, можете ее тоже прихватить с собой. Пригодится.

Эти анимации захватят с собой скелет, который у нас уже есть, можете согласиться с заменой.
Еще в этой папке с анимациями есть анимации от другой модели. Папку Retargeting можно будет удалить, как и скелет от другой модели.

Почему именно эта модель? У нее есть все анимации для построения адекватного locomotion (движение вперед, назад, влево, вправо) и позы смещения прицелов для построения BP для этого. Мы же хотим адекватно двигаться и целиться?) Жаль, что я такой себе моделлер, но ничего. 

Оставляем пока эту модельку до следующего урока. Еще вы можете захватить папке Blendspaces, о которых я расскажу в следующем уроке, но вы можете с ними поиграться уже сейчас)

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

Перейдя в настройки, мы увидим вот такое вот окошко, в котором сейчас нас интересует вкладка Maps & Modes.

Здесь настраиваются параметры проекта вроде стандартных карт и выбора классов персонажа игрока и прочего.
Game default map - первая карта, которая будет открываться при запуске игры.

Editor Startup map - карта, которая первой открывается в движке

Transition map - переходная карта, которая откроется во время закрывания старой и запуска новой карты. Вроде окна с надписью "загрузка".

Default game mode
- здесь задается игровой режим, который будет выбираться по стандарту, если на конкретном уровне не задан никакой другой.

В Game Mode выбирается Default pawn class - класс персонажа, которым будет управлять игрок.
HUD Class - то, что будет видеть игрок. Сюда лепятся всякие прицелы если делать их текстурой, текстуры каких то эффектов при низком хп и т.д.
Player controller class - класс контроллера игрока. Т.е. то, как будет он управляться. У нас, скорее всего, будет стандартный.
Кстати, ничего из этого не меняется, т.к. выбрал режим, который у нас в исходниках и нааписан на C++, где кодом прописаны эти параметры. В следующем уроке это все переделаем.

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

Чтобы посмотреть, как работает Game mode, можете удалить с карты персонажа, которым мы сейчас бегаем и запустить игру. Вы все-равно будете играть этим персонажем, т.к. он указан в game mode. Вместо персонажа на уровне появится точка Network player start, перемещая которую, вы выбираете место, в котором будет появляться игрок.

Теперь поговорим о назначении управляющих кнопок.


В тех же настройках в разделе Engine, есть вкладка input.

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


Вы задаете название, и далее можете обрабатывать реакцию на событие с этим названием. Возьмем выстрел, например. Вот так он задается в коде.

На событие с именем "Fire", возникающем при нажатии кнопки, вызовется функция OnFire, где у нас пока сейчас прописан одиночный выстрел. Это же проворачивается и в BP.

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

Ну и по традиции ГУГЛОДИСКОССЫЛКА для тех кому лень мигрировать модельку. Ориентировочно на среду будет пост про персонажа.

Показать полностью 24
607

Unreal Engine 4. Разработка 3D / VR Игр №1. Введение в UE4 и первый скрипт на BLUEPRINT.

Доброго времени суток, все, кто подписался или просто проходил мимо. Ранее я писал, что на выходных будет первый вводный урок по UE4, собственно, настало это время!


Нам понадобится сам движок UE4 версии 4.10.X и Visual Studio 2015 Community. Все это доступно бесплатно. Все ссылки и требования по железу я описывал в нулевом ПОСТЕ


Начнем с создания проекта. Как я и писал ранее, будем комбинировать BP и C++. Запускаем из лаунчера движок, жмем New Project, выбираем C++ и из списка примеров берем FirstPerson, выбираем путь и придумываем название.

Чтобы сразу пояснить что и как, возьмем проект с примером для первого урока, а далее будем менять его с каждым новым уроком. Зачем? А чтобы сразу же не заваливать вас информацией о сборке уровней, настройках света, настройке персонажа игрока и т.д. и т.п. В стартовом проекте будет персонаж (ну как персонаж... Просто руки с оружием и камерой в центре) и оружие, стреляющее шариками. Все это мы благополучно выпилим в следующих уроках и сделаем нечто более интересное, похожее на игру)

После генерации кода вы увидите интерфейс движка с превью уровня. В этом уроке мы как раз и поговорим про сам движок и про BP.

Описание интерфейса UEEditor.

Content Browser.

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

Details.

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

World outliner.

Здесь находится список всех "актеров", которые находятся на сцене вашего уровня. Почему актеры? В UE4 есть класс AActor, от которого наследуется большая часть всех базовых классов, что есть в движке. Если вы что то видите в игре на сцене - это актер или меш, или система частиц... АЙ, если вы видите что то в игре на сцене, то, скорее всего, это актер. Если в коде перед именем класса стоит префикс A - значит этот класс является наследником от актера или от чего то, что тоже было наследовано от него. Вообще, у эпиков есть статья на их вики со стандартами кода, да и документацией к SDK. Но вкратце и по теме:


Классы наследованные от AActor имеют префикс A

Классы наследованные от UObject имеют префикс U

Классы наследованные от SWidget имеют префикс S

Абстрактные интерфейсы имеют префикс I

Структуры имеют префикс F

Wievport.

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

На том же вьюпорте имеются кнопки для редактирования выбранных актеров.


1. Переместить, вращать, растянуть.

2. Изменение чувствительности перемещения, вращения, растягивания.

3. Скорость перемещения камеры во время редактирования уровня.

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


Управление на вьюпорте. для поворота камеры зажмите ПКМ и двигайте мышь. Увеличение масштаба производится колесиком мыши. Перемещение камеры по уровню производится с помощью стрелок клавиатуры.


Панель над вьюпортом.

На ней находятся кнопки сохранения, открытия браузера контента, настроек проекта в целом, открытия/создания BP игры, уровня, сборки графики и различных параметров из движка(свет, геометрия, навигация), компиляция (Запускает компиляцию исходников вашего проекта. Через эдитор это происходит дольше, чем из студии), воспроизведение (Запуск игры на вьюпорте, и настройка параметров запуска). Launch уже собирает проект в exe файл (на самом деле не только exe, зависит от выбранных целевых платформ)

Modes.

Здесь вы можете искать ваши C++ и BP классы или брать те, что есть в движке по стандарту и располагать их на уровне. Здесь же находятся навмеши, навлинки, разные типы освещения, зоны звуковых или световых эффектов и т.д. В той же вкладке можно перейти в режим редактирования ландшафтов, рисования всякой растительности, редактирования геометрии и т.д. На этих всех делах будем останавливаться подробнее в следующих постах, когда что то из этого будет нам требоваться.

Для примера, давайте найдем объект Text Render и перетянем его из списка на уровень, зажав ЛКМ. Появится строка с текстом "Text". Повернем на 180 градусов нашу строчку. В свойствах поменяем текст на "Pikabu", сменим цвет и размер шрифта.

Давайте немного поиграемся с BLUEPRINT.

BP - это визуальный скриптинг в движке UE4. Если говорить проще, то это программирование мышкой. Ранее я обещал рассказать о плюсах и минусах, так что давайте начнем с хороших его сторон. (Опишу основное, другие достоинства или недостатки будут всплывать в процессе)

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


BP - это мощьный и очень удобный инструмент. Он идеален для простых объектов. В итоге, как ни старайся, но вы все-равно им будете пользоваться. Например, написав класс персонажа игрока, вам нужно будет создать BP, наследованный от вашего класса, чтобы выбрать модельку, выставить параметры и т.д. Редактор материалов в UE4 тоже работает на BP. Анимационный блюпринт делается тоже на BP (о нем в следующих уроках). Можно довольно быстро создавать события, которыми достаточно удобно пользоваться. Мультиплеер на BP делается проще, чем на C++, но местами связывает руки по возможностям.


Но, если говорить о плохих сторонах...

Отлаживать код на BP жутко не удобно. Если объект сложный, то появляется огромное количество "макоронин" от связей между блоками, в которых потом будет очень сложно разобраться (C++ тут удобнее). Не очень удобно комментировать. Некоторые вещи на бп просто не реализуемы т.к. отлаживать это все жутко муторно.

Тем не менее, движок строится на использовании BP. Сложные моменты с кучей связей вы можете просто перенести в функцию в своем классе C++ и разрешить ее использование в BP. В общем, тут каждый решает сам. Я не создаю C++ классы, ради того, чтобы написать 2 строчки, ведь быстрее будет сделать BP класс...


Давайте посмотрим что вообще представляет из себя BP или комбинация C++ с BP.
Сразу же даю скриншот BP и куска .h файла от класса нашего персонажа. Описание всего под картинкой.

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


Если открыть исходники нашего персонажа, в .h файле мы сможем увидеть те самые компоненты, отображаемые в BP и переменные, которые также видны в BP, если выбрать в списке компонентов верхний объект с поменткой "self", т.е. параментры самого класса. Обратите внимание на то, что в коде на C++ у макроса UPROPERTY указывается категория, и все переменные в BP располагаются по этим самым категориям, т.е. мы можем отсортировать наши переменные по ним так, чтобы в дальнейшем можно было проще их находить для изменения.


В данном случае у нас нет BP скриптов, у нас все прописано через C++, и просто выведены параметры персонажа в BP, чтобы можно было их быстро редактировать, не компилируя по пол дня из-за изменения значений пары переменных проект целиком из исходников. Довольно удобно, не правда ли?)

Это был такой маленький обзорчик BP, а теперь, по старым традициям, сделаем что то очень простое, вроде "Hello World!", но на BP. 

Давайте найдем в контент браузере папку Geometry, а в ней папку Meshes. Там вы найдете меш (3D объект) куба с именем "1M_Cube". Жмите правой кнопкой -> Asset Actions -> Create blueprint using this. Далее выбирайте папку, в которую вы хотите создать BP-класс и пишите имя. Кстати, я всегда приписываю префикс BP_ к блюпринт классам, чтобы потом в настройках чего-либо было проще находить нужное. Т.е. иногда нужен BP-класс, а иногда C++, а так их будет проще различать.

Так-с здесь бы пришлось слишком много писать и втыкать скриншотов, получилось бы очень не понятно, по-этому ВИДЕО! Да, видео, коротенькое, где можно посмотреть, как работать с BP и что из этого получается)

Вот такой вот у нас получился вращающийся и горящий "Hello World"-кубик :)

Частично познакомились с движком, все-равно многое осталось не понятным, но это же не последний урок. Самое интересное еще впереди!)


Может стоит весь формат выпусков переделать в видео? А то как то это все очень долго реализуется... Ну не суть, обдумается.


А вот и ссылочка на проект. Она будет актуальной всегда и проект по ней будет всегда от последнего урока: ГУГЛОДИСКОССЫЛКА


P.S. Если ткнуть на файл проекта UE4, появится список, в котором можно сгенерировать проект Visual Studio, не запуская сам движок. Если у вас установлена Visual Studio 2015 и сам движок, то при запуске проекта, он предложит его скомпилить, после чего запустит проект. Через Visual Studio просто ждем пока пройдет индексация и запускаем проект, как любой другой. В итоге запустится Editor. 

Спасибо, что прочитали этот длиннотекст, далее, наверное, будем играться с классом персонажа, его анимациями перемещения и оружием :) 
Всем удачи и, пользуясь случаем, поздравлю всех дам с 8 марта!

Показать полностью 15 1
10

Mac OS и история одного неудачника.

Как не стоит удалять резервные копии Time Machine... Не повторяйте моих ошибок, посмейтесь над этим фэйлом :D
Mac OS и история одного неудачника.
Показать полностью 1
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества