Найти тему
VlaKu

[5] Создание Survival Horror в стиле RE2 на Unreal Engine и С++. Пространственный инвентарь(Часть 2)

Теперь приступим к настройке самих виджетов и созданию компонента инвентаря.

Перейдем в WBP_Inventory

Удалим текс и добавим Canvas Panel

-2

на Canvas добавим Border и переименуем его в Background

-3

Зальем наш Background на всю площадь Canvas. Нужно нажать на "белый квадрат" ЛКМ+CTRL

-4

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

-5

И добавим небольшое размытие

-6

Силу размытия можно менять в параметре Blur Strength

-7

Теперь добавим на Canvas нашу сетку инвентаря WBP_InventoryGrid и назовем InventoryGridWidget

-8

Поменяем якорь на справа и в центре

-9

Установим следующие параметры

-10

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

Size To Content нужно поставить true

Теперь переходим в WBP_InventoryGrid. Добавляем Canvas и Border, который называем Grid

-11

Grid ставим по центру

-12

И зададим ему пока такие параметры

-13

Padding изменим на 0

-14

Цвет изменим на черный и сделаем чуть менее прозрачный, чем Background

-15

В SHInventoryGridWidget.h объявим функцию InitializeWidget, у которой будет два параметра. Указатель на компонент инвентаря и размер ячейки

-16

Также создадим две приватные переменные

-17

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

-18

В теле функции присвоим переменным значения

-19

Теперь нам нужно получить доступ к Border(Grid), который мы создавали в виджете WBP_InventoryGrid

Перейдем в SHInventoryGridWidget.h "забиндим" Grid из виджета на созданный указатель UBorder с именем Grid. Имена обязательно!!! должны совпадать

-20

И опять не забываем

-21

Также переопределим виртуальную функцию Initialize у UserWidget

-22

В cpp файле

-23

В Функции InitializeWidget добавим несколько строк для изменения размера ячеек инвентаря.

Сначала посчитаем ширину и высоту ячейки. Из эти значений создадим новый Vector2D.

И уже потом этот вектор подставим в функцию SetSize.

-24

Теперь перейдем в SHInventoryWidget.h и создадим публичную функцию InitializeInventoryWidget, которая будет принимать компонент инвентаря

-25

В секции protected опять "забиндим" компонент InventoryGridWidget из виджета

-26

И опять не забываем

-27

Переходим в SHInventoryWidget.срр и в теле функции у InventoryGridWidget вызываем функцию InitializeWidget

-28

Перейдем в SHPlayerHUD.cpp и в момент открытия инвентаря вызываем у InventoryWidget функцию InitializeInventoryWidget

-29

Теперь нам нужно сделать линии между ячейками инвентаря

Перейдем в SHInventoryGridWidget.h и объявим функцию CreateLineSegments

-30

Также создадим структуру FLine. В ней будет два поле типа Vector2D

-31

В приватной секции создадим массив TArray с типом нашей структуры и назовем его Lines

-32

Перейдем в cpp файл в Функцию CreateLineSegments.

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

Начнем с вертикальных.

Пока Index меньше или равен чем значение Column в компоненте инвентаря, цикл будет выполняться

Находим две точки X и Y для отрисовки линии

Потом создадим временную переменную Temp типа структуры FLine, куда поместим наши координаты

И потом добавляем в массив Lines

-33

Тоже самое проделываем и с горизонтальными линиями

-34

Теперь перейдем в функцию InitializeWidget и после изменения размера ячеек вызовем функцию CreateLineSegments

-35

Вернемся в заголовочный файл и переопределим функцию NativePaint

-36

В теле функции сначала создадим переменную Context

-37

После этого создадим еще один цикл и будем проходить по массиву Lines

C помощью функции DrawLine у UWidgetBlueprintLibrary рисуем наши линии

-38

Не забываем подключить заголовочный файл

-39

Теперь перейдем в редактор и изменим размер инвентаря и ячеек в компоненте инвентаря, который мы создали у персонажа

-40

И если во время игры нажать Tab у нас появится инвентарь указанных размеров

-41

Подпишись:

Discord - discord.gg/CqZTXY4zwG

VK - vk.com/vlakugames

Youtube - vk.cc/cchfQD

Rutube - https://rutube.ru/channel/23334940/