Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Нужен скрипт и GUI на инвентарь godot 4.2.2

Wintyx . Ученик (86), открыт 1 неделю назад
чтобы были просто квадраты внизу экрана, без доп. кнопок. чтобы подбирать предметы по левому клику, желательно но необязательно функция выброса предметов, чтобы при выбросе появлялись на полу. Чтобы нельзя было класть больше 6 предметов. Чтобы появлялась картинка предмета (ставить не надо, но чтобы можно было её менять). Делать обязательно в новой сцене.
1 ответ
Рустам Абдрашитов Мыслитель (9508) 1 неделю назад
### 1. Создание новой сцены

1. **Создайте новую сцену** в Godot и добавьте Node2D как корневой узел.
2. **Добавьте Control** как дочерний элемент Node2D для размещения элементов интерфейса.

### 2. Создание контейнера для инвентаря

1. **Добавьте HBoxContainer** как дочерний элемент Control. Этот контейнер будет содержать слоты для предметов.

2. **Настройте HBoxContainer**:
- Установите `Size Flags` на `Fill` и `Expand` для горизонтального направления.
- Установите `Min Size` по ширине, чтобы вместить 6 слотов.

### 3. Создание слотов для предметов

1. В HBoxContainer добавьте 6 **TextureButton** (или **TextureRect** для более простой реализации).

2. **Настройте каждый слот**:
- Установите одинаковый размер для всех слотов.
- Установите `Normal` текстуру для отображения пустого слота или фона.

### 4. Скрипт для управления инвентарем

Создайте новый скрипт на GDScript и подключите его к Node2D.
 extends Node2D 

# Максимальное количество предметов
const MAX_ITEMS = 6

# Список предметов
var inventory = []

# Ссылка на контейнер для слотов
onready var slot_container = $Control/HBoxContainer

func _ready():
# Инициализация слотов
update_inventory_slots()

func _on_item_pickup(item_texture: Texture):
if len(inventory) < MAX_ITEMS:
inventory.append(item_texture)
update_inventory_slots()

func _on_item_drop(index: int):
if index >= 0 and index < len(inventory):
var item_texture = inventory[index]
inventory.remove_at(index)
# Создать новый спрайт на полу с данным item_texture
var dropped_item = Sprite.new()
dropped_item.texture = item_texture
dropped_item.position = position # Установите позицию в нужное место
add_child(dropped_item)
update_inventory_slots()

func update_inventory_slots():
for i in range(slot_container.get_child_count()):
var slot = slot_container.get_child(i)
if i < len(inventory):
slot.texture_normal = inventory[i]
else:
slot.texture_normal = null
### 5. Настройка взаимодействия

1. **Подключите сигнал** `pressed` каждого слота к функции выброса предмета:
- Для этого в редакторе выберите каждый `TextureButton` и подключите сигнал `pressed` к функции `_on_item_drop`.

2. **Добавьте возможность подбора предметов**:
- Например, при взаимодействии с объектом в сцене вызывайте функцию `_on_item_pickup(item_texture)` с текстурой подобранного предмета.
Wintyx . Ученик (86) 1 неделю назад
ты в чат гпт забил?
Рустам Абдрашитов Мыслитель (9508) Wintyx . , +
Похожие вопросы