Блюпринт unreal engine 4: Основные приёмы Blueprint-программирования — Центр цифрового образования детей «IT-КУБ»

Содержание

Основные приёмы Blueprint-программирования — Центр цифрового образования детей «IT-КУБ»

Александр Буев, педагог «IT-куб»

Blueprints — это визуальная, нодовая система программирования,
которая используется в Unreal Engine 4. С помощью составления логических блоков
нодов, можно «собрать» как из конструктора программу любой сложности,
начиная от простого кликера, заканчивая полноценной RPG-игрой. Так как в
блупринтах не используется программный код — написать программу может каждый,
кто понимает основные принципы ООП.

В первую очередь идём
по переменным:

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

Boolean — булева переменная, принимает значения либо True, либо False
Byte — Целочисленные значения от 0 до 255
Integer — Целочисленные значения от -2147483647 до 2147483647
Float — Число с запятой, от 3. -38).
String — Строка, хранящая набор символов

Get, Set

Работая с переменными, мы можем либо получить значение, которое в них лежит, либо записать в них новое значение. За эти операции отвечают ноды Get (получить значение) и Set (задать новое значение).

Array, Add, Get

Array — это массив переменных того или иного типа. Например, нам надо хранить результаты турнирной таблицы для всех игроков. Мы запишем очки каждого игрока в массив в определённой последовательности. На скриншоте мы добавляем в конец массива число 12,54.
А когда нам понадобится достать из массива какое-то значение, мы укажем его порядковый номер и получим результат с помощью ноды Get. На скриншоте — получаем из массива значение переменной с индексом 2.

Есть ещё ноды, отвечающие за ход
выполнения логики. Называются они нодами FlowControl

Ноды этого типа регулируют то, по какому «пути» или по какой «ветке» пойдёт дальнейшее выполнение алгоритма в зависимости от заданных условий.

Branch

Работает как оператор IF в языках программировании и в зависимости от того какое значение стоит во входном значении Condition — Branch перенаправляет ход исполнения функций по той или иной «ветке» событий.

ForLoop

Это цикл. Он выполняет определённые последовательности команд N-ое количество раз и после завершения запускает последовательность по пину Completed. В параметрах этой ноды стоит первый и последний индекс, по диапазону между ними и проходит сам цикл. При этом внутри цикла мы можем использовать тот самый индекс, по которому в данный момент происходит выполнение тела цикла «Loop Body».
Например, вам надо создать 50 врагов — тогда соедините функцию «Создание врагов» с пином «Loop Body» и укажите диапазон индексов от 0 до 49.

ForEachLoop

Тот же цикл, только в этом варианте он работает с массивом и выполняется столько раз, сколько в присоединённом массиве находится элементов. Так же в теле цикла мы получаем доступ к N-ому объекту этого массива и можем с ним работать.
Например, мы хотим увеличить каждое значение в массиве на единицу — прогоним массив циклом и каждый элемент увеличим на единицу (нода «++»).

CompareFloat, CompareInt

В зависимости от типа сравнения — сравниваются либо целочисленные (Integer) значения, либо значения с запятой (Float). На входе указывается с каким числом мы сравниваем ту или иную переменную, на выходе выполняется соответственный результату сравнения пин «больше», «меньше» или «равно».

FlipFlop

Это переключатель. Когда сигнал приходит в ноду в первый раз — выполняется Пин «A», когда второй раз — Пин «B», в следующий раз снова «A» и так далее. Кстати выходное значение так же меняется с true на false в зависимости от того какой пин выполняется в данный момент.

Всё это лишь верхушка айсберга, но,
думаю суть ясна: программировать на блупринтах совсем не сложно, ведь нет
необходимости учить сложный синтаксис и писать код, а визуальное взаимодействие
сильно помогает ориентироваться в алгоритме и «писать» программы быстрее.

Пример использования основных нод раздела Flow Control


7
фундаментальных терминов, которые надо знать, работая с игровыми движками

  1. FPS (Frame Per Second)
    Показатель производительности, указывающий количество кадров, которое просчитывается и отображается на экране за 1 секунду. Чем выше FPS — тем плавнее работа трёхмерного приложения.
  2. Вся трёхмерная геометрия состоит из треугольников
    Чем больше количество треугольников, тем выше уровень детализации 3D-модели и тем сложнее её отрисовать на экране. Для игр используют LowPoly — геометрию, которая содержит минимум треугольников, а детализация компенсируется специальными текстурами для отображения мелких деталей.
  3. Draw Call
    Процесс обращения процессора к видеокарте с передачей конкретного объекта или задания для отрисовки. Чем меньше таких операций, тем выше показатель FPS. Количество Draw Call’ов можно сократить, объединяя несколько объектов в один или используя специальные Instance-объекты, которые посылаются в отрисовку «за один присест». Объединив 10 объектов в 1 вызовется не 10 DC, а лишь 1 и скорость построения изображения этих объектов увеличится в 10 раз.
  4. LOD (Level Of Detail)
    Это степени детализации трёхмерных моделей, которые используются для замены моделей по мере их отдаления от камеры на более простые, с меньшим количеством треугольников. Чем меньше треугольников в кадре для отрисовки — тем быстрее строится кадр, а значит выше FPS.
  5. HLOD (Hierarchial LOD)
    Специальный инструмент Unreal Engine 4 для создания кластеров (групп) Лодов, производит сильную оптимизацию трёхмерной сцены, объединяя несколько объектов в один. Его работа заключается в уменьшении треугольников в кадре + уменьшении количества DrawCall’ов.
  6. Шейдер
    Программный код, выполняющийся на видеокарте для отрисовки конкретного объекта или эффекта в конечное изображение на экране. В шейдере может быть различное количество инструкций в зависимости от сложности эффекта или материала. Чем больше инструкций — тем сложнее видеокарте просчитать и отрисовать изображение.
  7. Antialiasing
    Алгоритм сглаживания, который сокращает, либо убирает эффект лесенки. Лесенка — это когда чётко видны границы объекта в виде лесенки из пикселей на экране. В UE4 есть 3 алгоритма сглаживания: FXAA, MSAA, TAA. Каждый из них по-разному работает и предназначен для разных целей. Temporal AA (TAA) — этот режим сглаживания разработан Epic Games для UE4, он считается лучшим из доступных по соотношению производительность/качество.

🎮 Как использовать Blueprint для быстрого прототипирования игр на Unreal Engine 4?

Что нужно знать перед прочтением этой статьи?

Предполагается, что читатель уже базово знаком с Unreal Engine 4: умеет создавать проекты, приблизительно знает, где в интерфейсе что находится, а также имеет представление об основных концепциях движка. Также предполагается, что читатель знаком с программированием на любом императивном языке и имеет опыт работы с отладчиком (вне зависимости от языка программирования и IDE).

Примечание

В статье используется UE 4.27.1.

Что такое Blueprint?

Под Blueprint (BP) могут подразумевать две связанные, но всё-таки разные вещи: систему визуального программирования и созданные с помощью этой системы объекты. Суть этой системы заключается в программировании игровой логики посредством основанного на графах скриптового языка.

Пример графа Blueprint

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

Больше полезной информации вы найдёте на нашем телеграм-канале «Библиотека программиста».

Интересно, перейти к каналу

Для чего нужен Blueprint?

Как ни странно, Blueprint нужен не только для программирования акторов (игровых объектов) и подобных игровых вещей. Приведём несколько примеров использования этого инструмента:

  • UI: логика для виджетов может быть реализована в Blueprint;
  • Анимации: в Unreal Engine есть понятие Animation Blueprint – фактически это особая версия BP, в которой имеются дополнительные фичи и целью которой является описание анимационной части поведения объекта;
  • Расширения редактора: с помощью BP можно создавать так называемые Editor Utility, фактически представляющие собой скрипты для редактора. Их можно использовать для автоматизации рутинных задач или даже для серьезного дополнения возможностей редактора.

Какова польза от Blueprint?

Если мы говорим про систему визуальной разработки, основным её преимуществом является возможность дать всю мощь программирования в руки не-программистов: гейм-дизайнеров, левел-дизайнеров, нарративных дизайнеров и любых других что-угодно-дизайнеров. Фактически это основа философии и причина добавления системы в движок: позволить всей команде работать на равных условиях.

Если же говорить о BP имея в виду классы и экземпляры классов, то их главным преимуществом является, пожалуй, возможность визуального создания игровых объектов: расположение различных компонентов (компонент – обособленная функциональность, предназначенная для переиспользования) в пространстве, а также их настройка прямо из редактора. Это аналогичная упомянутой в предыдущем абзаце идея, только касающаяся не логики, а данных – настроек компонентов.

Обзор редактора Blueprint и создание класса

Для создания BP-классов существует несколько путей, но основной – сделать т.н. ассет Blueprint из панели Content Browser. Необходимо щёлкнуть правой кнопкой мыши в Content Browser и выбрать Blueprint Class:

Создание BP-класса

На следующем шаге необходимо выбрать базовый класс для создаваемого:

Выбор базового класса

По двойному щелчку на созданном классе будет открыт редактор BP. Остановимся на нём (на скриншоте ниже создан BP-класс, наследник класса Actor):

Редактор BP

  • В левой верхней части расположена панель, где отображается иерархия компонентов BP-класса. Сразу под ней – панель, отражающая структуру класса: функции, BP-графы, макросы, переменные и делегаты.
  • В средней части окна редактора расположена основная рабочая область, поделенная на вкладки. Вкладок может быть гораздо больше чем показано на скриншоте: к примеру, для каждой новой функции класса будет создана отдельная.
  • Вкладка “Viewport”, отображает все компоненты класса в пространстве так, как они будут расположены при создании экземпляра этого BP-класса в игре. Здесь разработчик может перемещать, вращать и масштабировать компоненты, немедленно наблюдая результат манипуляций.
  • Вкладка “Construction Script” позволяет задать функцию, вызываемую при создании экземпляра этого класса. Знакомые с объектно-ориентированным программированием читатели уже поняли, что речь идёт о BP-версии обычного конструктора. Вкладка “Event Graph” содержит логику обработки воспринимаемых классом событий.
  • Панель “Details” в левой части редактора, отображает настройки самого класса, одного из его компонентов, переменной класса и т.д.
  • Основная часть описанных ниже манипуляций будет сосредоточена во вкладке Event Graph и панели “My Blueprint”.

Переменные в Blueprint

Создадим унаследованный от Actor BP-класс, назовём его Bulb и с помощью кнопки “Add Component” добавим в него точечный источник света (Point Light Component):

Добавление компонента

Создадим простую сцену, на которой расположим выполняющий роль пола куб, а посередине – наш актор:

Тестовая сцена

Запустим проект и убедимся, что куб освещён скучным белым светом:

Скучный белый свет

Вернёмся к нашему BP и с помощью кнопки “+ Variable” создадим новую переменную, используя которую будет можно задать цвет источника света. Назовём её LightColor, выделим в секции “Variables” панели “My Blueprint” и переключимся на панель “Details”, где будут отображены настройки переменной:

Добавление переменнойНастройки переменной

Выберем тип “Linear Color” и установим флаг “Instance Editable”. Этот флаг позволит задавать значение переменной для каждого экземпляра класса.

Данные есть, теперь к логике. Перейдём в “Event Graph” к событию BeginPlay. Это событие запустится, когда актор будет добавлен (заспаунен) на уровень. Потянем левой кнопкой мыши за отмеченный сиреневым элемент:

Событие BeginPlay

Отпустим левую кнопку мыши – тут же появится окно выбора функции. Снимем флаг “Context Sensitive” (без него редактор предложит все возможные функции, а не только те, которые укладываются в текущий контекст) и найдём функцию Set Light Color компонента Point Light Component:

Панель выбора действия

Должно получиться так:

Установка цвета на срабатывании BeginPlay

Белая линия означает порядок выполнения. Иначе говоря, белая линия – это возможный путь передачи управления из одной BP-ноды (узла BP-графа) в другую.

Цветные пины (pin) означают входные данные/выходные данные. Как видно на скриншоте, Set Light Color ожидает три значения на входе:

  • Target – объект, на котором будет вызвана функция. Здесь ожидается Point Light Component. Перетянем его зажатой левой кнопкой мыши из секции “Variables” панели “My Blueprint”. После отпускания кнопки мыши, появится выбор:

Выбор между геттером и сеттером

Нас интересует получение компонента, а не его перезапись, поэтому выбираем Get PointLight. Соединим выходной пин создавшейся ноды с входным пином Target ноды-вызова Set Light Color:

Передача значения PointLight в функцию

  • New Light Color – новый цвет для источника света. Его необходимо взять из созданной нами переменной LightColor. Для закрепления проделайте это сами.
  • sRGB – булев флаг. Значение задано на самой ноде: флаг отмечен – значение истино, снят – ложно.

После изменения BP его необходимо скомпилировать. Для этого есть специальная кнопка на панели инструментов в верхней части редактора.

Тулбар BP-редактора. Кнопка для компиляции – крайняя слева

При успешной компиляции кнопка будет гореть зелёным:

Индикатор успешной компиляции

Перейдем к редактору уровня, выделим наш актор и обратимся к панели “Details”:

Свойства актора

В разделе “Default” можно видеть созданную нами переменную Light Color. Нажмем на квадратно-чёрную её часть и выберем какой-нибудь цвет. Запустим проект и убедимся, что источник света изменил цвет:

Нескучный голубой цвет

Примечание

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

Операторы ветвления

Вернёмся к переменной LightColor и сделаем из неё массив. Для этого необходимо нажать на иконку справа от типа переменной и выбрать иконку с квадратами три на три:

Выбор модификации переменной: одиночное значение, массив, множество и карта/словарь (map)

Вероятно, редактор попросит вас подтвердить: действительно ли вы хотите изменить тип переменной: смело отвечайте “Да”. После этого ваш граф сломается:

Граф сломался

Чтобы это исправить, удалите ноду с LightColor и перекомпилируйте BP.

Помимо массива и отдельной переменной имеется множество (Set) и карта (Map).

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

Создадим новую переменную CurrentColorIndex типа Integer, скомпилируем BP и зададим переменной значение по умолчанию – 0:

Значение переменной по умолчанию

Создадим такую конструкцию:

Мне надо подписать картинку, но я сам не знаю, что здесь происходит

Непонятно? Позвольте объяснить.

Главная нода, на которую стоит обратить внимание – Branch, представляющая собой обыкновенный if. На входе – булево значение, выходы – это передача управления либо по одному пути, либо по другому.

Булево значение является результатом строгого сравнения значения CurrentColorIndex и размера массива LightColor. Внимательный читатель догадывается к чему идёт дело: к наивной реализации цикла.

Правая часть блюпринта

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

Итоговый блюпринт целиком

Добавим цветов в находящийся на уровне актор:

Массив цветов внутри нашего актора

Запустив игру, проверим результат.

Циклы

Конструкцию выше можно с легкостью заменить на встроенный в BP цикл For Each:

Встроенная в BP нода-цикл

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

Запустим и убедимся, что всё работает. Ничего не работает? У меня тоже.

Это старый баг движка (или фича – уже никто не знает). Delay внутри For each игнорируется, поэтому цикл выполняется настолько быстро, что становится невозможным заметить реальную смену цвета, а лишь только черный экран.

Примечание

Варианты обхода этого бага

Функции

Для возможности визуального отслеживания результатов работы нашего BP, вернём вариант с Branch. В секции “Functions” панели “My Blueprint” создадим новую функцию SetColor:

Создание новой функции

В панели “Details” добавим параметр для функции с именем NewColor и типом Linear Color:

Создание нового параметра функции

Заметьте, для новой функции в рабочей области BP-редактора появилась новая вкладка. Перенесём туда вызов функции SetLightColor на компоненте Point Light:

Функция Set Color

Заменим оба вызова Set Light Color в Event Graph на вызов нашей функции:

Обновлённый блюпринт

Запустим проект и убедимся, что всё работает, как и работало.

Отладка Blueprint

В редакторе имеется встроенный отладчик, позволяющий устанавливать точки останова и просматривать значение переменных в BP прямо во время выполнения. Поставим точку останова на вызове Set Light Color в функции Set Color. Для этого кликните по ноде правой кнопкой мыши и выберите “Add Breakpoint”:

Брейкпоинт на BP-ноде

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

Сработавший брейкпоинт

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

Тулбар дебаггера

Баланс между C++ и Blueprint

Какую часть проекта стоит реализовать в Blueprint, а какую – написать на C++? Здесь нет однозначных ответов: они варьируются от проекта к проекту, однако есть несколько рекомендаций.

Для начала сравним C++ и Blueprint.

C++

  • Код на C++ работает быстрее;
  • C++ гораздо лучше справится с задачами, связанными с булевой логикой, математикой и большими системами;
  • На C++ рекомендуется рекомендуется писать ядро игры и реализовывать критически важную функциональность;
  • Часть функциональности и определённых в C++ данных можно держать закрытыми для Blueprint, не загрязняя ими API.

Blueprint

  • Достаточно производительный, но медленнее C++;
  • Blueprint гораздо проще использовать для прототипирования;
  • Гораздо более быстрые итерации разработки, чем при использовании C++;
  • Больше участников команды могут работать с Blueprint;
  • Фактически каждый BP является ассетом. Иначе говоря BP – это контент. В некоторых случаях это важно.

В двух словах:

C++ лучше использовать для core-функциональности, в то время как BP – для чего-либо специфичного для отдельно-взятого уровня или зависимого от другого контента. Ещё один вариант, когда BP предпочтительней – это нередкий случай, в котором необходимо создать содержащий несколько компонентов объект, особенно если расположение этих компонентов в пространстве важно. Объекты такого рода гораздо удобнее создавать/изменять в редакторе, с чем и связана рекомендация реализовывать их через BP.

Для команды из одного человека и небольшого проекта вполне приемлемо использовать только BP. Использование же только C++ (в любом проекте) вряд ли является обоснованным решением.

Бесплатные курсы по BP от Epic Games

Официальный портал от Epic Games предлагает не только курсы по BP, однако мы рекомендуем в первую очередь пройти этот. Он содержит обзор BP-составляющей движка, философии и идей стоящих за BP, а также немалое количество советов из разряда “я бы хотел, чтобы мне сказали это, когда я начинал”.

Вывод

Blueprint – система визуального программирования в UE, призванная увеличить количество участников команды, способных самостоятельно создавать игровую логику. Блюпринтами также называют определённые через эту систему классы. BP поддерживает все фичи обычных языков программирования: переменные, функции, операторы ветвления, циклы. В редакторе UE имеется встроенный отладчик BP. Перед началом проекта стоит серьезно задуматься о балансе между C++ и BP, которого стоит придерживаться.

***

Несмотря на кажущуюся простоту BP – система с большим количеством тонкостей, в особенности если смешивать её с C++. Полное изучение всех особенностей работы с BP может занять время. Удачи в обучении!

Анатомия чертежа в Unreal Engine

> Программирование и скриптинг
> Чертежи Визуальные скрипты
> Анатомия чертежа

Choose your operating system:

Windows

macOS

Linux

Related Courses

On this page

Blueprint Classes

A Blueprint Class , often shortened as Blueprint , is an asset that allows content создатели, чтобы легко добавлять функциональные возможности поверх существующих классов игрового процесса.
Чертежи создаются внутри Unreal Editor визуально, а не путем ввода кода, и сохраняются как активы в пакете контента.
По сути, они определяют новый класс или тип Актера, который затем может быть помещен в карты как экземпляры, ведущие себя как любой другой тип Актера.

Компоненты

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

Графики

Графики содержат информацию о поведении ваших чертежей во время разработки и во время игры . Скрипт Construction запускается в соответствии со списком компонентов, когда создается экземпляр класса Blueprint ,
позволяя динамически настраивать внешний вид нового Object или Actor .

EventGraph Blueprint содержит граф узлов, который использует события и вызовы функций для выполнения действий в ответ на игровые события, связанные с Blueprint. Это используется для добавления функциональности, общей для всех экземпляров Blueprint. Здесь настраиваются интерактивность и динамические ответы. Например, светокопия может отреагировать на повреждение, отключив свои LightComponent и изменение материала, используемого его сеткой. Это автоматически обеспечит такое поведение для всех экземпляров светового Blueprint.

  • График событий

  • Графики

Организация и повторное использование сценария

По мере того, как вы будете создавать новые сценарии в своих Blueprints , вы можете обнаружить, что некоторые части сценария вы часто используете повторно. Функции и Макросы позволяют повторно использовать разделы скрипта,
хотя каждый метод имеет разные сильные стороны и варианты использования.
Дополнительные сведения о ключевых различиях между функциями и макросами см. в руководстве Blueprint Best Practices.

Вы также можете свернуть разделы вашего Graph во вложенные Graphs для организации.

  • Функции

  • Функциональные вызовы

  • Создание функций

  • Макросы

  • Создание макросов

  • Свертывание графиков

Теги

Чертежи

чертеж

Эта страница была написана для предыдущей версии Unreal Engine и не обновлялась для текущей версии Unreal Engine 5.0.

Пространства имен Blueprint в Unreal Engine

Выберите свою операционную систему:

Windows

macOS

Linux

На этой странице

Пространства имен Blueprint

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

Группируя активы в пространства имен Blueprint, вы можете отложить загрузку актива до тех пор, пока он не понадобится. Это дает дополнительное преимущество при работе в редакторе Blueprint, поскольку любые действия, которые актив Blueprint может выполнить из своего контекстного меню, будут отфильтрованы в его пространстве имен Blueprint.

Использование функции

Чтобы увидеть рабочий пример этой функции, выполните следующие действия:

  1. Начните с создания нового Games > Blank Project > с включенным Starter Content с именем BlueprintNamespaces .

  2. Щелкните Content Drawer , чтобы открыть его, затем перейдите к StaterContent > Blueprints и дважды щелкните Blueprint_CeilingLight Чертеж, чтобы открыть свои Классы по умолчанию .

  3. На панели инструментов щелкните Настройки класса , затем перейдите к категории Панель сведений Параметры схемы . В переменной Blueprint Namespace введите ваше пространство имен в текстовое поле.

    В нашем примере мы назвали пространство имен Blueprint «BlueprintNamespaces.StarterContent»

    При вводе вашего пространства имен в текстовое поле Blueprint Namespace редактор проверит строку, чтобы убедиться, что она не содержит несовместимых символов, таких как «#» или «,».

  4. Нажмите Скомпилируйте и Сохраните чертеж .

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

    После запуска редактора вы можете увидеть, каким ресурсам библиотеки уже назначено пространство имен, выполнив поиск «BlueprintNamespace=StarterContent» в контент браузере.

    Когда вы открываете ресурс Blueprint, который содержит ссылку на один из ваших недавно созданных ресурсов, он загружается как зависимость импорта пакета от ссылающегося Blueprint. То же самое происходит, если вы создаете новый Blueprint на основе родительского класса Blueprint, который уже ссылается на один из этих активов.

Импорт пространств имен

Процесс импорта аналогичен добавлению «#include» для заголовка библиотеки в исходный файл .cpp . При работе с пространствами имен Blueprint вы можете импортировать пространство имен любым из следующих способов:

Настройка пространства имен Blueprint

Вы можете добавить пространство имен Blueprint в группу пространств имен, к которой вы хотите иметь доступ в редакторе, выполнив следующие действия:

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

  2. На панели инструментов щелкните Параметры класса и перейдите к панели Подробности Blueprint Options > Blueprint Namespace категория, затем введите пространство имен в текстовое поле.

  3. На панели инструментов нажмите Компилировать и Сохранить .

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

Изменение настроек редактора или настроек проекта

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

 [РЕГИОН: примечание]
Редактирование настроек редактора повлияет на локальный экземпляр для каждого пользователя, в то время как редактирование настроек проекта будет применяться ко всему вашему проекту. Это повлияет на всех пользователей, которые совместно используют систему управления версиями в вашем проекте.*
[/РЕГИОН] 

Чтобы настроить набор импорта по умолчанию для локального экземпляра редактора:

  1. Из на панели инструментов , перейдите к Редактировать > Предпочтения редактора > Редакторы контента > Редактор Blueprint > Эксперимента , и от namesspaces 70020> Эксперимента , и от namesspaces. ( + ), чтобы добавить ваше пространство имен в качестве элемента в список.

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

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

  1. Navigate to the Edit > Project Settings > Editor > Blueprint Project Settings > Experimental , then in the Namespaces to Always Include Array List, click Add ( + ), чтобы добавить ваше пространство имен в список:

    В настройках проекта мы отредактировали настройки проекта Blueprint, чтобы включить пространство имен под названием «BlueprintNamespaces.StarterContent».

  • Вы можете явно импортировать одно или несколько пространств имен для вашего Blueprint, нажав кнопку Добавить ( + ).

  • Добавление импорта немедленно загрузит все общие библиотеки, которые в настоящее время назначены пространству имен.

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

Неявный импорт пространства имен

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

 [РЕГИОН: примечание]
Может показаться, что это ставит под угрозу поведение автоматического импорта, однако выбор неимпортированного типа требует дополнительного шага неявного добавления пространства имен этого типа в набор явного импорта Blueprint, описанный в методе выше.
[/REGION] 

Чтобы увидеть, как работает эта функция:

  1. Создайте новый актив Blueprint с именем TestType , затем перейдите к Class Settings > Details > Blueprint Options и назначьте его пространству имен «YourNameSpace. AutoImportTest»:

    В нашем примере мы назвали наше пространство имен Blueprint как BlueprintNamespaces.AutoImportTest.

  2. Щелкните Compile и Save , затем повторно запустите редактор.

  1. Щелкните Content Drawer , затем перейдите к Content > StarterContent > Blueprints и дважды щелкните Blueprint_CeilingLight , чтобы открыть его Класс по умолчанию .

    Вы можете открыть любой из существующих чертежей или создать новый. В нашем примере мы решили использовать существующий Blueprint_CeilingLight.

  2. Из Class Defaults перейдите к My Blueprint > Variables и щелкните Add ( + ), чтобы создать новую переменную с именем TestType20Var 90.

  3. Щелкните стрелку раскрывающегося списка Boolean , чтобы вызвать селектор типа контакта, затем в текстовом поле найдите и выберите TestType , затем выберите Object Reference .

  4. Щелкните Настройки класса , затем перейдите к панели Подробности > Импорт > Импортированные пространства имен , и вы увидите, что YourNamespace.AutoImportTest теперь указан в категории Imported Namespaces.

Использование автоматического импорта не требует выгрузки типа. Ваше пространство имен (если оно не является глобальным и еще не импортировано) автоматически импортируется при выборе. Включение функций импорта пространства имен автоматически импортирует пространство имен этого актива в Blueprint.

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

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

  • Добавление любого нового компонента на панель «Компоненты» автоматически импортирует любое пространство имен, связанное с этим выбранным типом компонента. Это поведение также относится к неимпортированным типам компонентов.

Фильтрация неимпортированных типов и действий

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

  1. Нажмите Content Drawer , затем нажмите Add(+) > Create an Advanced Asset > Blueprints > Blueprint Function Library с именем Bp_FilterFunctionLibrary .

  2. Дважды щелкните Bp_FilterFunctionLibrary , чтобы открыть его Класс по умолчанию . На панели My Blueprint перейдите к категории Functions и переименуйте NewFunction_0 в FilteredFunction_0 .