Найти в Дзене
Игровой движок Godot engine

№238. Собираем простенький инвентарь. №2.

Продолжаем работать над инвентарем.
(если пропустили - первая часть ) В этой части соберём сам инвентарь как префаб, и научимся бросать в него иконки. Создаем сцену на основе User Interface ноды. Добавляем под корневую ноду :
Panel - просто панель для фона под инвентарем. У меня это зеленый фон. (Вы можете использовать картинку , либо вообще не использовать. В моем случае это чисто для «красоты»)
Margin Container - делает отступы , чтобы Grid Container был чуть сдвинут в центр. (опять же - это по желанию)
Grid Container - контейнер на три столбца. В этом контейнере будут лежать наши ячейки.
С1-С9 - Куча ячеек это просто TextureRect ноды с текстурой ячейки. Из важного тут : 1) В Panel необходимо игнорировать мышку. Для этого делаем соответствующую правку. 2) В Grid Container можно сделать отступы для ячеек, чтобы между ними было пространство. 3) У ячеек TextureRect в качестве текстуры используется спрайт. (32x32) И выставлены размеры 64 х 64. Никаких скриптов мы использовать в этом преф

Продолжаем работать над инвентарем.
(если пропустили - первая часть )

В этой части соберём сам инвентарь как префаб, и научимся бросать в него иконки.

Создаем сцену на основе User Interface ноды.

Добавляем под корневую ноду :
Panel - просто панель для фона под инвентарем. У меня это зеленый фон. (Вы можете использовать картинку , либо вообще не использовать. В моем случае это чисто для «красоты»)
Margin Container - делает отступы , чтобы Grid Container был чуть сдвинут в центр. (опять же - это по желанию)
Grid Container - контейнер на три столбца. В этом контейнере будут лежать наши ячейки.
С1-С9 - Куча ячеек это просто TextureRect ноды с текстурой ячейки.

-2

Из важного тут :

1) В Panel необходимо игнорировать мышку. Для этого делаем соответствующую правку.

-3

2) В Grid Container можно сделать отступы для ячеек, чтобы между ними было пространство.

-4

3) У ячеек TextureRect в качестве текстуры используется спрайт. (32x32)

-5

И выставлены размеры 64 х 64.

-6

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

-7

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

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

-8

Проверем что всё работает :

-9

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

Для этого в коде , где мы таскаем иконку чуть перепишем условие :
Если переменная ячейки не пустая - то позиции иконки будут равны ей.
Иначе - берем позиции курсора.
(в коде заметно что я сделал небольшой «оффсет» на 32 пикселя. Это для того чтобы иконка становилась по центру ячейки, а не по левому верхнему краю. )

-10

Проверяем:

-11

Иконки центрируются по ячейкам. И всё работает как нужно.

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

-12
-13

Работает. Но тут есть пара нюансов.

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

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

последняя меняет свою текстуру на текстуру иконки.

-14
-15

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

В моем случае все инвентарные состояния иконок имеют в своем имени два символа в конце - «_I»
Собственно всё что нам надо сделать, это подгружать не текущую текстуру , а текстуру с этим именем.

Создаем две новых переменных.
Первая получает имя файла текстуры иконки без пути и расширения.
Вторая собирает новый путь до новой текстуры.

Ну и загружаем её в ячейку.

-16
-17

На этом вторую часть можно завершать.

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


Подписывайтесь на канал, при желании
вступайте в группу в ВК.
Удачи в изучении годо