Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Введение
Easy Survival RPG - проект - прототип для создания сетевых игр в жанрах Survival или
RPG на движке Unreal Engine 4. В его основе лежит множество механик, начиная от
базового управления персонажем и взаимодействия с окружающим миром, до
создания мультиплеерных сессий с сохранением и загрузкой состояний игроков.
Данный проект является очень комплексной системой, на основе которой могут
создаваться другие проекты. Все системы и механики интегрированы друг в друга и
не могут с легкостью быть извлечены по отдельности. Проект должен быть
использован как основа для ваших проектов или как референс для создания похожих
механик в готовых проектах.
В этой документации собрана базовая информация по работе с мультиплеерными
проектами, а также полная информация описывающая все механики и принципы их
работы, а также руководства по работе с ними.
2
Оглавление
Введение 2
Оглавление 3
Базовые понятия 7
Основные классы 7
Работа с интерфейсами 10
Работа с таблицами данных 11
Работа с библиотеками 13
Работа с Gameplay Tags 14
Работа с сетью 16
3
4
Персонажи 107
Базовый класс персонажа 107
Описание 107
Компоненты 108
Переменные 109
Функции 113
Компоненты персонажа 117
BP_AttributesComponent 117
BP_FootstepComponent 120
BP_FoliageCheckerComponent 124
Класс игрового персонажа 125
5
Описание 125
Компоненты 126
Переменные 128
Функции 133
Работа с анимациями 141
Анимационные нотифаи 141
Список нотифаев 142
Анимационный блюпринт 145
Искусственный интеллект 152
Описание 152
Блекборд BB_Base 153
Дерево поведения BT_Base 154
6
Базовые понятия
Основные классы
Для создания проектов в Unreal Engine 4 необходимо знать основные классы, которые
будут постоянно использоваться для определенных целей. К таким классам относятся
GameInstance, GameMode, PlayerController, HUD и другие.
GameInstance - основной класс игры, экземпляр которого создается при запуске
игры. Как правило, должен содержать методы и переменные для переходов между
уровнями, методы настройки игры и методы загрузки и сохранения игры. Имеет
события вызывающиеся при запуске и завершении приложения, а также при
возникновении сетевых или технических ошибок. Эти события могут быть
переопределены по желанию.
Поменять GameInstance можно в Project Settings.
GameMode - класс, экземпляр которого создается при запуске любого уровня для
локального игрока. Содержит информацию о других классах, которые будут созданы
вместе с ним, таких как PlayerController, PlayerState, GameState, H
UD, а также
информацию о персонаже, который будет создан по-умолчанию при запуске уровня и
который будет управляться игроком. Необходим для выбора вышеперечисленных
классов, которые будут созданы при подключении к уровню. Имеет события,
вызывающиеся при подключении и отключении игрока к текущему уровню, смене
игроком имени, выбора точки спавна и респавна игрового персонажа и другие. Эти
события могут быть переопределены по желанию.
7
8
9
Работа с интерфейсами
Использование блюпринт интерфейсов позволяет использовать одинаковые
функции для взаимодействия с различными классами объектов. Для этого не нужно
будет приводить объект к определенному классу, у которого есть требуемые функции.
К примеру, можно создать интерфейс с функциями изменения здоровья объекта и
добавить его в блюпринт персонажа и блюпринт здания, а затем прописать логику
для этих интерфейсных функций внутри этих блюпринтов. После этого станет
возможным вызывать функцию изменения здоровья у персонажа и здания вне
зависимости от его класса. Также интерфейсы упрощают интеграцию одной сложной
системы в другую.
Для создания интерфейса нужно нажать на зеленую кнопку A
dd New в Content
Browser и выбрать Blueprint Interface в разделе Blueprints.
Чтобы добавить интерфейс для определенного актора, нужно открыть C
lass Settings,
нажать на кнопку A
dd и выбрать нужный интерфейс.
10
Для добавления таблицы требуется структура, на основе которой будут добавляться
строки. На рисунке ниже представлена структура для экземпляра предмета
используемая в проекте E
asy Survival RPG.
11
Для добавления таблицы необходимо нажать на зеленую кнопку Add New в Content
Browser и выбрать Data Table в разделе Miscellaneous, а затем выбрать структуру на
основе которой создается таблица.
Получить доступ к структуре данных таблицы внутри блюпринтов можно с помощью
функции GetDataTableRow.
12
Работа с библиотеками
При разработке крупных проектов приходится использовать одни и те же
последовательности функций огромное число раз. Эти последовательности можно
объединить в библиотеку функций и вызывать в любых блюпринтах проекта.
Создать библиотеки функций и макро можно нажав на зеленую кнопку
Add New в C
ontent Browser и выбрав B
lueprint Function Library и B
lueprint Macro
Library в разделе B
lueprints.
13
14
Таги можно использовать для проверки определенных условий на уровне. К примеру,
вE
asy Survival RPG они используются для заданий для игроков. Скелет-торговец не
выдаст вам задание на убийство скелетов, пока вы не выполните задание на морские
звезды.
15
Работа с сетью
Работа сети в Unreal Engine 4 - это очень комплексная система, для описания которой
понадобится ни один десяток страниц, поэтому стоит знать базовые понятия
относительно движка, которыми нужно руководствоваться при создании проекта.
4. Некоторые переменные в объектах также необходимо реплицировать, иначе
на сервере и клиенте значение переменных будет отличаться.
Реплицированная переменная должна изменяться только на сервере.
Для переменных существует два типа репликации:
Replicated - значение переменной дублируется на клиенты, когда оно
изменяется на сервере.
RepNotify - значение переменной дублируется на клиенты и вызывается
функция, которую можно изменить по своему усмотрению. К примеру, это
можно использовать для изменения меша оружия персонажа при изменении
значения определенной переменной.
16
5. Некоторые компоненты также должны быть реплицируемыми, если их данные
и переменные должны дублироваться, или они будут использоваться как
аргументы в серверных методах.
6. Существует три типа серверных методов:
Run on Server - событие будет вызвано только на серверной машине.
Run on Client - событие будет вызвано только на машине клиента.
Multicast - событие будет вызвано на всех машинах.
Reliable - событие произойдет обязательно, даже при плохом соединении
сети. Можно отключать для некоторых косметических событий (спавн
партиклей, различных эффектов и так далее, то есть всего того, что не влияет
на основной геймлпей).
7. Серверные методы будут вызваны только если вызываются из класса
PlayerController или вызываются из класса, владельцем которого является
PlayerController.
8. Чтобы клиенты могли подключиться к
серверу, нужно открыть уровень с опцией
listen.
17
BP_GameInstance
Описание
18
Переменные настроек
SettingsGameSaveSlot - слот, в который сохраняются, и из которого загружаются
пользовательские настройки игры.
SingleplayerStartLevel - стартовый уровень для режима одиночной игры.
MultiplayerStartLevel - стартовый уровень для режима многопользовательской игры.
MainMenuLevel - уровень главного меню игры.
Переменные состояния
IsGameStarted - показатель того, что игра была запущена из главного меню, а не из
вьюпорта уровня.
IsMultiplayer - показатель того, что игра происходит в многопользовательском
режиме.
CurrentGameSave - ссылка на объект сохранения текущей игры.
SettingsGameSave - ссылка на объект сохранения настроек игры.
CurrentLevel - название текущего уровня.
TransferPlayerData - стартовые данные игрока при переходе из главного меню в
игру.
LoadingScreen - ссылка на виджет экрана загрузки.
GameTags - список текущих глобальных игровых тагов игры.
19
BP_PlayerController
Описание
Также тут находятся функции инициализации игры для игрока и функция
инициализации всех компонентов.
20
Макросы
IsGameInputs - продолжает последовательность действий, если пользовательский
интерфейс закрыт.
IsGameOrDialogue - выбирает последовательность действий в зависимости от того
открыт диалог или нет.
Переменные
ChangeBuildingHeight - показатель, при котором необходимо изменять высоту
строящегося объекта с помощью колесика мыши.
21
BP_HUD_Game
Описание
Класс имплементирует интерфейс B
PI_HUD_Game и его можно легко заменить на
другой HUD, который тоже имплементирует функции этого интерфейса.
Функции этого интерфейса могут быть вызваны для класса HUD, полученного с
помощью функции G
etHUD.
22
Функции
Main - функции создания, открытия и закрытия пользовательского интерфейса, а
также другие функции - функции создания меню паузы и меню смерти.
State - функции, возвращающие состояние пользовательского интерфейса,а именно -
открыт или закрыт инвентарь, журнал, карта и тд.
Containers - функции обновления слотов инвентаря, экипировки и хотбара, а также
заполнение их предметами.
Building - функции открытия и закрытия меню строительства и меню киянки.
Trading - функции обновления окон при торговли.
Maps - функции открытия карты и отключения отрисовки карты и миникарты.
Journal - функции обновления журнала и активных заданий.
Dialogue - функции обновления и управления диалогами.
Settings - функции обновления настроек отображения элементов пользовательского
интерфейса.
Character - функции обновления информации о персонаже.
Chat - функции открытия и закрытия чата и функции обновление сообщений.
23
Other - остальные функции не вошедшие ни в одну категорию. Например, это
функции открытия кодового замка, отображения подбираемых предметов,
проигрывания анимаций при получении урона или блоке во время боя и другие.
Переменные
HUD - ссылка на основной виджет пользовательского интерфейса.
PauseMenu - ссылка на виджет меню паузы.
DeathMenu - ссылка на виджет меню смерти.
24
BP_GameSave_Settings
Описание
Переменные
25
Функции
SaveSettings - сохранение настроек в слот для сохранения настроек игры.
AddSingleplayerSave - добавление слота в массив сохраненных игр в
однопользовательском режиме.
RemoveSingleplayerSave - удаление слота из массива сохраненных игр в
однопользовательском режиме.
AddMultiplayerSave - добавление слота в массив сохраненных игр в
многопользовательском режиме.
RemoveMultiplayerSave - удаление слота из массива сохраненных игр в
многопользовательском режиме.
26
BP_GameSave_Session
Описание
Переменные
27
BP_PlayerManagerComponent
Описание
Компонент должен быть добавлен в класс P
layerController и также там
инициализирован, вместе с компонентом строительства ( B
P_BuildComponent ) и
компонентом взаимодействия ( B
P_InteractionComponent ).
28
Переменные - Ссылки
29
Переменные - Состояние
Переменные - Настройки
30
Функции
31
Связывающие события
OnSelectedItemChanged - происходит,
когда предмет в активном слоте быстрого
доступа меняется.
OnInventoryItemChanged - происходит,
когда предмет инвентаря меняется.
OnPlayerTagsUpdated - происходит, когда
теги игрока были обновлены.
OnPlayerItemsChanged - происходит,
когда предмет в слоте инвентаря, хотбара
или экипировки меняется.
OnPlayerDestructTree - происходит, когда
игрок срубает дерево.
OnPlayerFullDestructTree - происходит,
когда игрок уничтожает дерево с корнем.
OnPlayerCompleteCrafting - происходит, когда игрок завершает крафт предмета.
OnPlayerCompleteBuilding - происходит, когда игрок завершает строительство.
OnPlayerDestructMineStage - происходит, когда игрок разрушает часть жилы.
OnPlayerDestructMine - происходит, когда игрок полностью разрушает жилу.
OnPlayerKillCharacter - происходит, когда игрок убивает персонажа.
OnInventoryItemAdded - происходит, когда предмет добавляется в инвентарь игрока.
OnPlayerConsumeItem - происходит, когда игрок расходует предмет.
OnEquipmentItemChanged - происходит, когда предмет экипировки меняется.
OnHotbarItemChanged - происходит, когда предмет в хотбаре меняется.
32
33
BPI_InteractionObject
GetInteractionObjectName_BPI - возвращает название объекта.
GetInteractionText_BPI - возвращает описание процесса взаимодействия.
TryInteract_BPI - попытка взаимодействовать с объектом.
TryTurnOn_BPI - попытка включить объект.
TryTurnOff_BPI - попытка выключить объект.
IsTurnedOn_BPI - возвращает true, если объект в данный момент включен.
CheckCanInteract_BPI - возвращает true, если с объектом можно взаимодействовать
в данный момент.
34
35
BP_InteractionComponent
Описание
36
Переменные
Функции
Init Component - функция инициализации компонента для игрока.
Update Target Actor - функции поиска и обновления целевого актора.
Связывающие события
OnTargetActorChanged - происходит, когда целевой актор изменяется на другой.
37
38
Структуры
Структуры S
TR_Blueprint, STR_CraftingList, STR_QueueBlueprint,
STR_AdditionalBlueprint предназначены для хранении информации о чертежах для
системы крафтинга.
Структуры S
TR_ItemTradeData, STR_CostValue, STR_TradeList предназначены для
работы с системой торговли.
Структуры S
TR_LootItem и S
TR_Loot предназначены для составления и настройки
списков выпадающих предметов.
39
ItemHandle - идентификатор предмета в таблице данных DT_Items.
Amount - текущее количество предмета в стаке.
Durability - текущее значение прочности предмета.
40
Decay - текущее значение разложения предмета.
Name - название предмета.
Description - описание предмета.
Icon - иконка предмета.
ItemClass - класс актора в мире.
MaxStack - максимальное количество предметов в стаке.
MaxDurability - максимальное значение прочности предмета.
StaticMeshes - список статических мешей, используемых предметом. Например
индекс “Drop” используется для отображения меша предмета, при его выбрасывании
из инвентаря.
SkeletalMeshes - список скелетал мешей, используемых предметом.
Sounds - список звуков, используемых предметом. Например индекс “Take”
используется для воспроизведения звука, при его добавлении в инвентарь.
ItemTags - список тегов предмета, для определения типа предмета.
CostValue - структура, определяющая стоимость предмета при его продаже продавцу.
EquipmentAttributes - атрибуты предмета, добавляемые игровому персонажу, если
он экипирует этот предмет.
CanDecay - показатель, может ли данный предмет разлагаться со временем.
DecayTime - время разложения предмета в секундах.
DecayItem - предмет, в который превратится этот предмет после разложения.
Weight - вес одного предмета в стаке.
UseAbilityClass - класс актора, который будет создан и активирован при
использовании предмета.
41
Классификация предметов
Для каждого предмета могут быть выбраны разные теги и классификации.
Component - обычный предмет, из которого может быть сделано что-то другое.
Equipment - предмет является экипировкой.
Equipment.B
ody - экипировка на тело.
Equipment.F
eet - экипировка на стопы.
Equipment.F
eet.B
ootDecal - отрисовывать декаль сапогов, вместо декали ног.
Equipment.H
ands - экипировка на руки.
Equipment.H
ead - экипировка на голову.
Equipment.P
ants - экипировка на ноги.
42
Fuel - предмет является топливом.
Fuel.Coal - предмет является углем.
Fuel.Foliage - предмет является травой.
Fuel.LiquidFuel - предмет является жидким топливом.
Fuel.Wood - предмет является деревом.
Quest - квестовый предмет.
Resource - предмет является ресурсом.
Resource.C
oins - предмет является золотыми монетами.
Usable - предмет можно использовать.
Usable.Building - предмет является постройкой.
Usable.Consumable - предмет расходуется при использовании.
Usable.Stance - использует определенные анимации.
Usable.Tool - предмет является инструментом.
Usable.Weapon - предмет является оружием.
Классификации типов предметов прописаны в библиотеке BP_ItemsLibrary, и можно
проверять, относится ли предмет к определенному типу предметов.
43
BP_Item
Описание
Для размещения предметов на уровне используется класс BP_Item. Объект этого же
класса создается при выбрасывании предмета из слота контейнера.
Класс имплементирует интерфейс B
PI_InteractionObject, чтобы игрок мог с ним
взаимодействовать с помощью компонента B
P_InteractionComponent.
Класс реплицируется.
Выброшенный из инвентаря предмет будет уничтожен спустя какое-то время, с
помощью таймера.
При падении на землю или в воду предмет проигрывает звук, настроенный в таблице
для этого предмета.
Переменные
ItemHandle - идентификатор
предмета в таблице DT_Items.
ID - идентификатор.
Amount - количество предметов в
стаке при спавне.
Durability - текущая прочность
предмета при спавне.
Decay - оставшееся время
разложения предмета при спавне.
44
SimulatePhysics - показатель того, должна ли быть включена симуляция физики для
предмета.
DecayTickTime - время таймера для обновления значения разложения предмета.
DestroyTime - время, через которое предмет будет уничтожен после выбрасывания.
InWater - показатель того, что предмет находится в воде.
ItemData - полная информация о предмете, основанная на значениях переменных
при спавне.
SaveID - идентификатор объекта для системы сохранения.
45
BP_ContainerComponent
Описание
Переменные
46
DropPrimitiveComponent - ссылка на компонент, положение которого будет
использовано для выбрасывания предметов.
DropLocation - точка, которая будет использована для создания выбрасываемых
предметов.
DropLocationOverridden - показатель того, что требуется перегружать локацию в
которой будут создаваться выбрасываемые из контейнера предметы.
DecaySlots - массив слотов, на которые действует таймер разложения.
Weight - общий вес всех предметов в контейнере.
SaveID - идентификатор для системы сохранения и загрузки.
Связывающие события
OnOpened - происходит, когда открывается хотя бы одним игроком.
OnClosed - происходит, когда закрывается всеми игроками.
OnSlotItemChanged - происходит, когда предмет в слоте контейнера изменяется.
OnWeightChanged - происходит, когда общий вес предметов изменяется.
OnItemAdded - происходит, когда предмет добавляется в контейнер.
47
BP_EquipmentComponent
Описание
Связывающие события
OnEquipmentChanged - происходит, когда предмет в слоте экипировке изменяется.
48
BP_HotbarComponent
Описание
Переменные
SelectedItemSlot - индекс текущего
выбранного слота.
Связывающие события
49
BP_CraftingComponent
Описание
Переменные
50
CraftingEnabled - показатель того, что производство включено.
Autocrafting - показатель того, что производство будет автоматически начинаться,
если есть предметы на производство какого-либо чертежа из списка.
CraftingTickTime - интервал таймера производства, для обновления прогресса.
MulticraftCount - количество чертежей, одновременно находящихся в производстве.
CompleteEventBinds - если включена, будет вызывать событие OnCraftingCompleted.
Связывающие события
OnCraftingStarted - происходит, когда производство чертежей начинается.
OnCraftingEnded - происходит, когда производство чертежей заканчивается.
OnOpened - происходит, когда открывается хотя бы одним игроком.
OnClosed - происходит, когда закрывается всеми игроками.
OnCraftingCompleted - происходит, когда производство чертежа выполнено.
51
BP_FuelGeneratorComponent
Описание
52
Переменные
Связывающие события
53
BP_TradeComponent
Описание
Переменные
TradeListHandle - идентификатор списка предметов для торговли из таблицы данных
DT_TradeLists.
TradeList - список предметов для торговли.
ItemsToSell - предметы на продажу.
54
55
Нажатие на кнопку [ Take All ], переместит все предметы из контейнера в инвентарь
игрока.
Функционал контейнера можно найти в виджете U
I_LootContainer.
Функционал отображения контейнера можно найти в виджете U
I_HUD.
56
Закрыть инвентарь вместе с местом производства можно с помощью кнопки [ Tab ].
Если при вызове функции O
penCraftingPlace_BPI включить переменную
OnlyCraftingQueue, то будет отображена только очередь производства без списка
доступных чертежей и информации о выбранном чертеже.
При нажатии на кнопку [ Craft ] и при наличии требуемых ресурсов запустится
процесс производства, который будет происходить в компоненте
BP_CraftingComponent. Процесс производства можно отменить нажав кнопку с
крестиком.
Функции управления процессом производства находятся в B
PI_Player и
имплементированы в классе BP_PlayerController, но сам функционал этих функций
находится в классе B
P_PlayerManagerComponent.
57
Обработка событий нажатия на кнопки включения и выключения находятся внутри
блюпринта виджета.
Для открытия виджета переключателя используется функция
OpenInteractionSwitcher_BPI из интерфейса B
PI_Player. Ее можно вызывать при
взаимодействии с объектами, у которых есть компонент генератора.
Функции управления переключателем находятся в B
PI_Player и имплементированы в
классе B
P_PlayerController, но сам функционал этих функций находится в классе
BP_PlayerManagerComponent.
58
Закрыть инвентарь вместе с местом производства можно с помощью кнопки [ Tab ].
При нажатии на кнопку [ Sell ] будет произведена попытка продажи выбранного
предмета по цене продажи. При нажатии на кнопку [ Buy ] будет произведена
попытка покупки выбранного предмета по указанной цене.
Обработка событий нажатия на эти кнопки находится в UI_SelectedTradingItemInfo.
Функции управления процессом торговли находятся в B
PI_Player и
имплементированы в классе BP_PlayerController, но сам функционал этих функций
находится в классе B
P_PlayerManagerComponent.
59
Игрок может выбирать активный слот с помощью клавиш [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ], [ 6 ].
Функции выбора слота панели быстрого доступа находятся в B
P_PlayerController в
графе I nputs. Сам функционал переключения находится в компоненте
BP_PlayerManagerComponent.
60
61
Система строительства
Описание
62
STR_BuildingObject
ID - идентификатор строительного объекта из таблицы DT_BuildingObjects.
Name - название строительного объекта.
Class - класс строительного объекта.
Icon - иконка строительного объекта для пользовательского интерфейса.
Description - описание строительного объекта для пользовательского интерфейса.
StaticMesh - меш строительного объекта.
DestructibleMesh - разрушаемый меш строительного объекта.
MaxDurability - максимальная прочность строительного объекта.
CanBeDamaged - показатель того, может ли объект получать урон.
UseMeshSockets - показатель того, что для соединения объектов будут
использоваться сокеты из статик меша.
CorrectMeshTransform - смещение меша.
BuildingBlueprint - идентификатор чертежа для строительства объекта, из которого
можно получить список требуемых для строительства ресурсов.
UpgradeObject - идентификатор объекта, до которого можно улучшить данный
объект.
UpgradeBlueprnt - идентификатор чертежа для улучшения объекта, из которого
63
можно получить список требуемых для улучшения ресурсов.
RepairBlueprint - идентификатор чертежа для ремонта объекта, из которого можно
получить список требуемых для ремонта ресурсов.
RepairFactor - коэффициент ремонта, который показывает долю восстанавливаемой
прочности объекта за одно ремонтное взаимодействие.
64
BP_Building_BuildingObject
Описание
65
BPI_Floor - интерфейс для работы с этажом объекта.
BPI_Durability - интерфейс для работы с прочностью объекта.
BPI_SaveData - интерфейс для работы с системой сохранения и загрузки.
Переменные
BuildingObjectHandle - идентификатор
строительного объекта из таблицы
DT_BuildingObjects.
ID - идентификатор строительного
объекта.
BuildingType - тип строительного объекта.
Settings - загруженные настройки для
объекта из таблицы DT_BuildingObjects.
Built - показатель того, построен объект
или находится в режиме строительства.
PlacedOnLandscape - показатель того,
размещается ли объект на ландшафте или
нет.
IsFloor - показатель того, является ли
объект полом на котором можно
размещать объекты.
SocketName - название сокета для объекта,
при его попытке соединения с другими.
CanRotate - показатель того, можно ли
объект вращать на месте.
RotateAngle - угол, на который объект вращается на месте за раз.
66
Функции
67
BP_BuildComponent
Описание
Переменные
68
MaxInputRange - максимальная дальность строительства.
MaxInputOffsetZ - максимальное смещение
высоты строительства.
69
GridFoundationZ - смещение по оси Z для фундаментов в режиме строительства по
сетке.
GridPropsOffset - смещение для размещаемых объектов в режиме строительства по
сетке.
GridCorrectOffset - корректирующее смещение в режиме строительства по сетке.
NearSnappingMode - показатель того, что при соединении объектов будет
выбираться ближайший к целевой точке сокет.
AutoStartBuild - показатель того, что после постройки объекта, автоматически
начнется строительство того же объекта.
Функции
Связывающие события
OnBuildCompleted - происходит, когда завершается строительство объекта.
70
71
72
73
Коллизию типа StaticFoliage необходимо задавать мешам, которые будут
динамически заменяться на акторы. Она обязательно должна блокировать
FoliageChecker коллизию.
Коллизией типа FoliageChecker должен обладать только актор B
P_FoliageChecker.
Тип коллизии D
ynamicFoliage создан для физики интерактивных папоротников.
74
BP_FoliageCheckerComponent
Класс B
P_FoliageCheckerComponent осуществляет поиск и автоматическую замену
инстансов на экторы. Он создает актор с коллизией определенного радиуса и по тику
перемещает его в положение игрового персонажа. Сталкиваясь с инстансами,
вызывается событие O
nHitStaticFoliage, которое вызывает функцию взаимодействия
Interact с BP_InstancedComponent_Base и замену инстанса на актор.
Этот компонент должен быть добавлен в класс игрового персонажа.
Компонент не реплицируется.
75
BP_InstancedComponent_Base
Класс B
P_InstancedComponent_Base предоставляет общий функционал для замены
инстансов на акторы. Для каждого типа объекта, который будет заменяться в
процессе игры, необходимо создать дочерний класс с индивидуальными
настройками.
Функция I nteract удаляет инстанс и вызывает функцию Spawn для спавна объекта.
Если этот объект реплицируется, переменная OnlyServerSpawn д
олжна быть t rue.
Функция S
pawn должна быть перегружена индивидуально для каждого типа объекта.
Например так она будет выглядеть для интерактивных папоротников.
BPI_SaveData - интерфейс для работы с системой сохранения и загрузки.
76
77
Система диалогов
Описание
С персонажем можно начать диалог, если он может взаимодействовать и
идентификатор диалога существует в таблице DT_Dialogues.
78
79
STR_Dialogue
DialogueClass - класс актора диалога, который будет создан при начале диалога.
GameQuery - требование к тегам игры, для начала диалога.
PlayerQuery - требование к тегам игрока, для начала диалога.
FirstReplies - идентификаторы для выбора первой реплики из таблицы
DT_DialogueReplies с которых может начаться диалог.
Если нет определенных требований для начала диалога с персонажем, то GameQuery
и PlayerQuery д
олжны быть выставлены как на рисунке выше, иначе диалог не будет
начинаться.
80
STR_DialogueReply
ReplyHandle - идентификатор реплики в таблице DT_DialogueReplies.
IsPlayer - реплика выбираемая игроком.
SpeakerName - перегружает имя персонажа реплики.
SpeakerText - текст реплики.
SpeakerIcon - перегружает иконку персонажа реплики.
ReplyHeader - перегружает текст реплики в режиме выбора.
NextReplies - следующие возможные реплики.
ConditionsID - идентификатор условий для появления реплики.
EventID - идентификатор событий происходящих при воспроизведении реплики.
ReplySound - звук воспроизводимый во время реплики.
ReplyWave - локализованный звук воспроизводимый во время реплики.
81
BP_Dialogue_Base
82
Условия реплик
Проверка условий должна производиться в перегруженной функции CheckConditions
диалогового класса персонажа. Если совпадений не найдено или идентификатор
отсутствует функция должна возвращать t rue.
83
События реплик
Эти события необходимо прописывать индивидуально в диалоговом классе
персонажа.
С помощью этих событий можно добавлять теги или ресурсы игроку, добавлять
новые чертежи или записи в дневник и многое другое.
84
Схема диалога
85
Система квестов
Описание
86
BP_Quest_Base
QuestID - идентификатор задания.
DefaultQuestStage - название начальной стадии задания.
StartQuestTags - теги, добавляемые игроку при начале задания.
CompleteQuestTags - теги, добавляемые игроку при выполнении задания.
FailQuestTags - теги, добавляемые игроку при провале задания.
87
Функция C
ompleteQuestStage вызывается автоматически, когда все активные задачи
выполнены или когда выполнена одна из главных задач.
Модифицировав функцию StartQuestStage, можно, например, добавлять заметки в
дневник, добавлять игровые теги игроку, выдавать предметы и тд, в момент начала
стадии задания. Тоже самое можно делать в момент выполнения стадии в функции
CompleteQuestStage.
88
89
BP_QuestTaskComponent_Base
FinishOnce - завершение задачи происходит только один раз.
MainTask - задача является главной. Стадия задания сразу завершается при
выполнении такой задачи.
FailWhenFinished - при завершении задачи, задание будет провалено.
Основные задачи
90
91
Записи в дневнике
STR_JournalNote
NoteID - идентификатор записи в дневнике.
NoteType - тип записи в дневнике.
Name - название записи в дневнике.
Текст - текст записи в дневнике.
QuestProgressText - текущий прогресс задания для записи в дневнике.
QuestIsTracked - показатель того, что запись отслеживается в окне активных
заданий.
92
Для удаления записи с конкретным идентификатором необходимо вызвать функцию
RemoveJournalNote_BPI из интерфейса BPI_Player для целевого игрока.
93
94
STR_SaveData_Player
95
96
STR_SaveData_Level
97
ContainerComponents - данные компонентов контейнеров на уровне.
CraftingComponents - данные компонентов производства на уровне.
FuelGeneratorComponents - данные компонентов генератора на уровне.
InstancedMeshComponents - данные компонентов инстансов на уровне.
98
BP_GameSave_Settings
Описание
Переменные
99
Функции
SaveSettings - сохранение настроек в слот для сохранения настроек игры.
AddSingleplayerSave - добавление слота в массив сохраненных игр в
однопользовательском режиме.
RemoveSingleplayerSave - удаление слота из массива сохраненных игр в
однопользовательском режиме.
AddMultiplayerSave - добавление слота в массив сохраненных игр в
многопользовательском режиме.
RemoveMultiplayerSave - удаление слота из массива сохраненных игр в
многопользовательском режиме.
100
BP_GameSave_Session
Описание
Переменные
101
Функции
102
BPI_SaveData
Все функции интерфейса должны быть имплементированы в акторе или компоненте,
для сохранения его данных с помощью системы сохранения и загрузки.
103
LoadData_BPI - загрузка данных объекта и инициализация загруженных данных.
104
105
106
Персонажи
Класс B
P_Character_Base имплементирует интерфейсы B
PI_Character и
BPI_InteractionObject. В интерфейсе BPI_Character п
редставлены функции для
работы с состоянием персонажа и для вызова различных взаимодействий с ним.
BPI_InteractionObject и
спользуется для возможности взаимодействовать с
персонажем, для начала диалога.
107
Компоненты
Компонент WaterSplashCollision и
спользуется для
определения момента падения персонажа в воду и
воспроизведения соответствующего звука.
StateWidget к
омпонент используется для
отображения имени персонажа, а также его
здоровья в игре.
Компонент AIPerception п
озволяет персонажу идентифицировать других персонажей
как друзей или врагов.
108
Переменные
Settings / Base
109
Settings / AI
110
State / Health
State / Energy
State / AI
111
State / Interactions
112
Функции
State
113
AI
114
Interactions / Base
Interactions / Combat
115
Interactions / Dialogue
116
Компоненты персонажа
BP_AttributesComponent
Описание
117
Например, на скрине выше показано, как влияет сила персонажа на наносимый им
урон и максимальный переносимый персонажем вес.
118
Настройки
119
BP_FootstepComponent
Описание
Компонент BP_FootstepComponent п
озволяет воспроизводить звуковые и
визуальные эффекты во время движения персонажа в зависимости от поверхности,
на которую он наступает. Также система автоматически определяет, движется ли
персонаж по воде, и воспроизводит соответствующие звуки.
Для материалов, по которым персонаж сможет передвигаться необходимо создать и
настроить соответствующие физические материалы.
120
121
122
Настройки
Настройки компонента B
P_FootstepComponent для разных персонажей могут
отличаться. Необходимо убедиться, что в используются правильные кости ног в
зависимости от скелета персонажа. Посмотреть названия костей ног можно в
используемом персонажем скелете.
Звуки шагов воспроизводимые для каждой поверхности настраиваются в D
etails
компонента BP_FootstepComponent в разделе Settings / Sounds.
Отпечаток оставляемый ногой, а также поверхности на которых он оставляется и
визуальные эффекты настраиваются в разделе S
ettings / Effects.
123
BP_FoliageCheckerComponent
Описание
Класс B
P_FoliageCheckerComponent осуществляет поиск и автоматическую замену
инстансов на экторы. Он создает актор с коллизией определенного радиуса и по тику
перемещает его в положение игрового персонажа.
Настройки
Для компонента B
P_FoliageCheckerComponent можно настроить радиус
автоматической замены инстансов. Сделать это можно выбрав компонент в списке
компонентов, а затем изменив поле SphereRadius в окне D
etails.
124
Класс B
P_Character_Player имплементирует интерфейс BPI_PlayerCharacter. В этом
интерфейсе представлены функции для работы с состояниями игрового персонажа,
для работы с его кастомизацией и для вызова функций взаимодействия с хотбаром.
125
Компоненты
Компоненты CameraBoom и F
ollowCamera
используются для системы игровой камеры.
FoliageCheckerComponent и
спользуется в
системе заменяемых инстансов, которая
описывается в разделе Система заменяемых
инстансов.
126
FootstepComponent п
озволяет оставлять следы от ног и воспроизводить звуки
касания ног в зависимости от типа касаемой поверхности.
127
Переменные
Settings / Customization
EquipmentCharacterID - идентификатор
персонажа, для получения меша экипировки.
DefaultHeadMesh - изначальный скелетал меш
головы персонажа для компонента H
eadMesh.
DefaultBodyMesh - изначальный скелетал меш
туловища персонажа для компонента B
odyMesh.
DefaultPantsMesh - изначальный скелетал меш
штанов персонажа для компонента P
antsMesh.
DefaultHandsMesh - изначальный скелетал меш
рук персонажа для компонента HandsMesh.
DefaultFeetMesh - изначальный скелетал меш ног
персонажа для компонента FeetMesh.
DefaultHairColor - изначальный цвет прически
персонажа.
DefaultPantsColor - изначальный цвет штанов персонажа.
DefaultSkinColor - изначальный цвет кожи персонажа.
CustomizedHairColors - список возможных цветов прически персонажа.
CustomizedPantsColors - список возможных цветов штанов персонажа.
CustomizedSkinColors - список возможных цветов кожи персонажа.
CustomizedHeadMeshes - список возможных скелетал мешей головы персонажа.
CustomizedPantsMeshes - список возможных скелетал мешей штанов персонажа.
128
Settings / Interactions
Settings / Anims
129
State / Interactions
130
State / Rotation
TargetCharacterRotation - определяет
требуемый поворот персонажа.
CharacterRotation - текущий поворот
персонажа.
PlayerControlRotation - текущий поворот
контроллера игрока.
State / Oxygen
State / Hunger
131
State / Thirst
State / Customization
DynamicHeadMaterial - динамический
материал для головы персонажа.
DynamicBodyMaterial - динамический
материал для туловища персонажа.
DynamicPantsMaterial - динамический
материал для штанов персонажа.
DynamicHandsMaterial - динамический
материал для рук персонажа.
DynamicFeetMaterial - динамический
материал для ног персонажа.
SourceMaterial - исходный материал
персонажа.
EquipedHeadMesh - скелетал меш головы
в экипировке.
EquipedBodyMesh - скелетал меш туловища в экипировке.
EquipedPantsMesh - скелетал меш штанов в экипировке.
EquipedHandsMesh - скелетал меш рук в экипировке.
EquipedFeetMesh - скелетал меш ног в экипировке.
EquipedWeaponMesh - статический меш предмета в выбранном слоте хотбара.
132
Функции
State
133
134
Interactions / Items
135
Interactions / Combat
136
Interactions / Tools
137
Interactions / Player
138
Interactions / Base
Interactions / Dialogue
139
Customization
140
Работа с анимациями
Анимационные нотифаи
● AnimNotifyState - нотифай можно выставить на определенное время
анимации. Класс имеет функцию для получения имени нотифая, функции,
которые срабатывают в начале и в конце вызова нотифая, а также функцию
которая срабатывает по тику на протяжении всего нотифая. Эти функции
можно переопределить.
141
Список нотифаев
BP_Notify_CompleteDigging
Вызывает функцию успешного копания лопатой для игрового персонажа. Для
срабатывания персонаж должен имплементировать функцию C
ompleteDigging_BPI
из интерфейса BPI_PlayerCharacter.
BP_Notify_Footstep
Вызывает функцию касания ногой поверхности для персонажа. Для срабатывания
персонаж должен иметь настроенный компонент BP_FootstepComponent.
FootstepType - тип касания поверхности.
PlaySound - определяет нужно ли
воспроизводить звук касания.
IsLeftFoot - определяет какой ногой
персонаж коснулся поверхности, левой или
правой.
FootIndex - определяет индекс ноги с правой или левой стороны персонажа.
BP_Notify_ItemUsed
Вызывает функцию успешного завершения использования предмета для игрового
персонажа. Для срабатывания персонаж должен имплементировать функцию
ItemUsed_BPI из интерфейса B
PI_PlayerCharacter.
BP_Notify_PlayItemSound
Вызывает функцию воспроизведения звука по названию для активного предмета
персонажа. Для срабатывания персонаж должен имплементировать функцию
PlayItemSound_BPI из интерфейса B
PI_Character.
SoundName - название звука.
BP_Notify_TraceDamage
Вызывает функции нанесения персонажем урона с помощью трейсов. Для
срабатывания персонаж должен имплементировать функцию T
raceDealDamage_BPI
из интерфейса BPI_Character.
142
BP_NotifyState_BlockUsedSlot
Блокирует предмет в активном слоте хотбара на время действия нотифая.
Для работы класс персонажа должен имплементировать функцию B
lockUsedSlot_BPI
из интерфейса BPI_PlayerCharacter.
BP_NotifyState_ContinueAttack
На время действия нотифая переводит персонажа в состояние, в котором он может
продолжить атаку. Для работы класс персонажа должен имплементировать функции
GetInteractionState_BPI и C
ontinueAttack_BPI из интерфейса B
PI_Character.
NextAnim - следующая анимация атаки.
BP_NotifyState_InteractionState
На время действия нотифая задает состояния для персонажа. Для работы класс
персонажа должен имплементировать функцию SetInteractionState_BPI из
интерфейса B
PI_Character.
InteractionState - состояние персонажа,
которое будет задано.
BP_NotifyState_OverrideWalkSpeed
На время действия нотифая перегружает скорость передвижения персонажа.
Для работы класс персонажа должен имплементировать функцию
OverrideWalkSpeed_BPI из интерфейса BPI_Character.
OverridedWalkSpeed - перегруженная
скорость.
OverridedInterpWalkSpeed - скорость
изменения скорости.
143
BP_NotifyState_SetWeaponSocket
На время действия нотифая меняет сокет крепления активного предмета персонажа.
Для работы класс персонажа должен имплементировать функцию
SetWeaponSocket_BPI из интерфейса BPI_Character.
StartWeaponSocket - сокет, на который
крепится активный предмет в начале действия
нотифая.
EndWeaponSocket - сокет, на который
крепится активный предмет в конце действия нотифая.
144
Анимационный блюпринт
Функция B
lueprintInitializeAnimation вызывается при инициализации
анимационного блюпринта. В этой функции необходимо инициализировать ссылку
активного персонажа, чтобы получить доступ к переменным его состояния.
Функция B
lueprintUpdateAnimation вызывается каждый тик перед началом
блендинга анимаций. В этой функции необходимо определить и получить значения
всех переменных состояний персонажа, перед тем как будет произведен бленд и
выбор соответствующих анимаций.
145
В функции UpdateVariables п
роизводится определение всех состояний персонажа и
задаются значения соответствующим переменным. К таким переменным могут
относиться скорость персонажа, текущий режим перемещения, показатель того, что
персонаж жив, мертв и тд.
В функции UpdateVariables д
ля игрового персонажа, происходит вызов трех функций
для определения всех состояний необходимых для бленда анимаций.
146
Здесь реализованы переходы между основными режимами перемещения. Персонаж
находится в состоянии I dle / Move, если он находится на земле. После прыжка он
переходит в состояние Jump_Cycle, до момента пока не приземлится.
При приземлении он переходит в состояние Jump_End, а затем возвращается в Idle /
Move. Если персонаж заходит в воду он переходит в состояние S
wimming, пока не
выберется на сушу. При смерти в воде он переходит в состояние I dle_Water_Death.
147
148
Из состояния W
eapon персонаж может перейти в состояние B
locking, если изменится
переменная I sBlocking. По завершению блокирования персонаж автоматически
вернется в состояние Weapon.
Финальный бленд верхней части тела получается после бленда стойки персонажа с
аим офсетом и с отдельным блендом для каждой руки.
149
Anim - анимация.
SlotName - слот анимационного блюпринта, для которого будет вызвана анимация.
BlendInTime - время блендинга при входе в анимацию.
BlendOutTime - время блендинга при выходе из анимации.
InPlayRate - скорость воспроизведения анимации.
LoopCount - количество повторений анимации.
BlendOutTriggerTime - время относительно конца анимации, с которого начинается
бленд выхода анимации.
InTimeToStartMontageAt - время с которого начнется воспроизведение анимации.
Каждый анимационный слот блендится по разному.
Слот DefaultSlot н
е блендится вообще и используется, когда нужно полностью
воспроизвести анимацию вне зависимости от состояния персонажа.
150
Слот UpperBodySlot - блендится для верхней части тела. Используется для анимаций,
которые должны воспроизводиться на ходу, например, рубка деревьев или атака.
Слот Blocking - блендится во время состояния блокирования для верхней части тела.
Используется для воспроизведения анимаций блокирования удара.
151
Искусственный интеллект
Описание
152
Блекборд BB_Base
153
154
Преследуя цель персонаж выбирает одну из 4 задач в зависимости от выполнения
условий.
155
Если персонаж не может атаковать и может быть испуган, он начинает убегать от
угрозы на определенное расстояние.
156
Если угроз для персонажа нет и задана точка патрулирования он направится к ней.
Достигнув её он через определенное время направится к следующей точке
патрулирования, если она задана, а если точка не задана останется патрулировать в
текущей точке.
После преследования цели персонаж возвращается в текущую точку патрулирования.
157
Если угроз для персонажа нет и точка патрулирования не задана, персонаж будет
блуждать в охраняемой точке. Время от времени персонаж будет проигрывать
анимацию бездействия.
После преследования цели персонаж вернется в охраняемую точку.
158
Настройки проекта
Настройки коллизии
159
Настройки управления
160
161
Настройки плагинов
162
Настройки STEAM
163