Table of contents

В этом гайде расскажем и покажем, как подключать JSON к UE с помощью Struct и blueprints.

Также объясним, как работать с типом данных Subtable (вложенная виртуальная таблица), который применяется в редакторе Ficher.

Что будем делать:

  1. Используем стандартный проект Top Down.
  2. В нем изменим скорость бега персонажа, подключив JSON из редактора.

Создаем проект

Создайте стандартный проект Top Down из библиотеки шаблонов игр движка.

В этом проекте создайте папку для хранения структур таблиц и библиотек, экспортированных из Ficher.

Создаем папки в проекте движка

Чтобы создать папку, в нижнем правом углу нажмите Content Drawer. Затем в папке Content добавьте две подпапки:

• Models. В ней будут храниться структуры таблиц.

• Resources – для хранения библиотеки.

Подготавливаем таблицы в редакторе Ficher

Перейдите в редактор Ficher и создайте таблицу. Внесите в нее необходимые для игры данные.

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

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

Вот как будет выглядеть таблица из редактора после конвертации в JSON:

[ { "id": 1, "speed": 10.0, "name": "Meeseeks", "data": [ {"id": 1, "level": 1, "agility": 1, "strength": 5, "intelligence": 10}, {"id": 2, "level": 2, "agility": 2, "strength": 6, "intelligence": 11}, {"id": 3, "level": 3, "agility": 3, "strength": 7, "intelligence": 12} ] }, { "id": 2, "speed": 1.0, "name": "Rimuru", "data": [ {"id": 1 ,"level": 1, "agility": 1.5, "strength": 4, "intelligence": 9}, {"id": 2, "level": 2, "agility": 2.5, "strength": 5, "intelligence": 10}, {"id": 3, "level": 3, "agility": 3.5, "strength": 6, "intelligence": 11} ] } ]

Добавляем структуры в UE

Для экспортированной таблицы нужно создать две структуры в движке. Для этого сделайте следующее:

  1. Нажмите кнопку +Add.
  2. Выберите вкладку Blueprint Structure.
  3. Назовите структуру UnitsStruct.

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

Вот что получится в итоге:

💡
Зачем мы добавили две структуры на один файл?

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

Настраиваем структуры

Редактируем структуру для вложенной таблицы

Сначала настроим структуру вложенной таблицы - UnitsDataStruct. Для этого нужно:

  1. Создать новую переменную, нажав на кнопку Add Variable.
  2. Добавить нужное количество переменных и назвать их id, level, agility, strength, intelligence - каждая соответствует колонке в таблице редактора. Укажите тип данных для переменных (пояснение см. ниже).
💡
С++ строго типизированный язык, и поэтому для переменных мы должны указать тип данных, который лежит в соответствующей колонке редактора. Если вы не знаете что выбирать, то рекомендуем следующее:
• если в колонке содержатся числа - выбирайте integer (если однозначно уверены, что числа будут целые) или float (в остальных случаях).
• если в колонке текст - выбирайте string.

Должна получиться такая структура. Сохраните ее.

Редактируем структуру основной таблицы

Теперь перейдите к настройке структуры для основной таблицы.

  1. Откройте структуру UnitsStruct.
  2. Добавьте нужное количество переменных и назовите их id, speed, name. Укажите для них тип данных (должен соответствовать тому, что содержится в одноименных колонках таблицы).

Получится следующая структура:

Подключаем структуры друг к другу

Чтобы в движке подключить вложенную таблицу к основной, нужно:

  1. В структуру основной таблицы добавить переменную data.
  2. В типе данных нужно найти по названию структуру Units Data Struct и выбрать ее.

В строке переменной рядом с корзиной есть выбор структуры данных. Нажмите на него и выберите Array. Так мы сообщаем, что привязываем массив из структур UnitsDataStruct.

Итоговый результат должен выглядеть так:

Добавляем и сопоставляем JSON

После того, как все структуры настроены, переходим к работе с JSON.

Шаг 1: загрузите распакованный архив из конструктора в ранее созданную папку Resources.

Шаг 2: когда в нижнем правом углу появится диалоговое окно, нажмите в нем Import.

💡
UE сам отслеживает изменения файлов, и поэтому при обновлении файла он предложит вам его реимпортировать.
Сопоставляем JSON

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

В этом окне сделайте следующие настройки:

  1. В Import As выберите Data Table.
  2. В Choose Data Table Row Type выберите UnitsStruct (ранее созданная структура).

Теперь UE понимает, что таблица units связана со структурой UnitsStruct и может корректно ее обрабатывать.

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

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

Установите скорость персонажа: в структуре откройте папку Content/TopDown/Blueprints и выберите блюпринт BP_TopDownCharacter.

Чтобы найти параметр скорости нужно:

  1. Выделить в левом сайдбаре BP_TopDownCharacter.
  2. В правом сайдбаре в Details ввести Speed, чтобы найти интересующий нас параметр Max Walk Speed.
💡
Вы можете убедиться, что изменение показателя Max Walk Speed повлияет на скорость персонажа: заметно увеличьте или уменьшите значение этого параметра вручную и запустите игру.

Настраиваем blueprints

На этом этапе нужно сделать так, чтобы при запуске игры данные читались из загруженного нами JSON-файла, а не из движка. Сделаем простую систему, чтобы загружать нужные данные на старте игры.

Создайте первую ноду для блюпринтов.

  1. В левом сайдабаре выделите Character Movement.
  2. Вызовите на нем контекстное меню.
  3. Нажмите Add EventAdd OnComponentAcitvated.

Появится нода, которая отвечает за активацию компонента, в котором находятся настройки скорости персонажа.

Подключаем таблицу к blueprints

Теперь подключите таблицу units в блюпринт:

Шаг 1

  1. В ноде On Component Activate нажмите на прозрачный треугольник (команда Exec) и перетяните его.
  2. Откроется диалоговое окно добавления node.
  3. В нем найдите и выберите Get Data Table Row.

Шаг 2

Теперь настроим таблицу:

  1. В появившейся ноде Get Data Table Row в параметрах Data Table выберите таблицу Units.
  2. В Row Name автоматически выберется первый персонаж. По желанию его можно заменить.

Шаг 3

Далее в ноде нужно отобразить все возможные параметры, которые ранее указывали в структуре:

  1. Нажмите на Out Row и вызовите контекстное меню.
  2. Выберите настройку Split Struct Pin.

Появятся все параметры, которые содержатся в таблице.

Добавляем ноду с настройками скорости

Теперь понадобится создать ноду, в которой будут храниться настройки. Для этого:

  1. В любом месте на карте блюпринта нажмите правой клавишей – откроется контекстное меню.
  2. В нем найдите Get Character Movement и добавьте его.

Далее добавляем в скрипт установку максимальной скорости:

  1. Протяните из синего кружка в ноде Character Movement и создайте новую ноду.
  2. В ней с помощью строки поиска найдите пункт Set Max Walk Speed и выберите его. Новая нода отобразится как Set.

Связываем все этапы между собой

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

Шаг 1: из ноды Get Data Row Table перетяните треугольник из Row Found в Exec ноды Set. Этим мы сообщим скрипту, что если таблица и строка найдены, то нужно выполнить действие в Set.

Шаг 2: из ноды Get Data Row Table соедините круг из Out Row Speed с Max Speed Walk в ноде Set. Этим мы сообщим, откуда читать значения.

В итоге должна получится подобная структура:

После таких настроек вы сможете изменять показатель скорости выбранного персонажа в исходном файле Units.json. После редактирования сохраните JSON-файл, и Unreal предложит реимпортировать значения.

💡
Если вы закрыли или не заметили диалоговое окно для импорта, вы можете нажать правой клавишей мыши по файлу Units в Unreal Engine, а в появившемся меню выбрать Reimport.