Top.Mail.Ru
Ответы

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

чтобы были просто квадраты внизу экрана, без доп. кнопок. чтобы подбирать предметы по левому клику, желательно но необязательно функция выброса предметов, чтобы при выбросе появлялись на полу. Чтобы нельзя было класть больше 6 предметов. Чтобы появлялась картинка предмета (ставить не надо, но чтобы можно было её менять). Делать обязательно в новой сцене.

По дате
По рейтингу
Аватар пользователя
Мудрец
8мес

### 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.

1234567891011121314151617181920212223242526272829303132333435363738
 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)` с текстурой подобранного предмета.