Jak stworzyć przedmioty nadające się do zbierania w Godot 4?

in polish •  19 days ago 

Przedmioty do zbierania w grach są realizowane za pomocą węzłów takich jak Area2D (dla gier 2D) lub Area3D (dla gier 3D), które umożliwiają wykrywanie kolizji z graczem. Poniżej znajduje się szczegółowy proces tworzenia takich przedmiotów.


1. Struktura sceny przedmiotu

Przykład struktury sceny:

CollectibleItem (Area2D)
├── Sprite2D (ikona przedmiotu)
└── CollisionShape2D (kształt kolizji)

  1. Area2D: Służy do wykrywania wejścia w obszar kolizji.
  2. Sprite2D: Wyświetla ikonę lub obraz przedmiotu.
  3. CollisionShape2D: Definiuje obszar kolizji.

2. Tworzenie sceny dla przedmiotu

a) Dodanie węzłów

  1. Utwórz nową scenę i dodaj węzeł bazowy typu Area2D.
  2. Dodaj dziecko Sprite2D i przypisz do niego teksturę (np. obrazek monety lub przedmiotu).
  3. Dodaj dziecko CollisionShape2D i wybierz kształt kolizji (np. RectangleShape2D lub CircleShape2D).

b) Skrypt obsługujący przedmiot

Przypisz skrypt do węzła Area2D, aby obsługiwał zdarzenie kolizji z graczem:

extends Area2D

@export var value: int = 10  # Wartość przedmiotu (np. punkty lub złoto)

func _ready():
    connect("body_entered", self, "_on_body_entered")

func _on_body_entered(body):
    if body.name == "Player":  # Sprawdź, czy to gracz
        print("Przedmiot zebrany! Wartość: ", value)
        queue_free()  # Usuń przedmiot


3. Dodanie przedmiotu do świata gry

  1. W głównej scenie gry (main.tscn) dodaj wcześniej utworzoną scenę przedmiotu jako instancję:
    • Kliknij Instance Child Scene i wybierz swoją scenę przedmiotu.
  2. Umieść instancję przedmiotu w świecie gry, gdzie gracz będzie mógł go zebrać.

4. Rozbudowa logiki przedmiotu

a) Dodanie animacji

Aby przedmiot wyglądał bardziej atrakcyjnie, możesz dodać animację:

  1. Dodaj węzeł AnimationPlayer jako dziecko Area2D.
  2. Stwórz animację (np. obrót lub pulsowanie) w AnimationPlayer.
  3. W skrypcie uruchom animację: func _ready(): $AnimationPlayer.play("rotate")

b) Integracja z systemem punktów

Dodaj system punktów w grze i zwiększaj wynik gracza po zebraniu przedmiotu:

  1. W głównej scenie dodaj zmienną do zarządzania punktami: var score: int = 0
  2. W funkcji _on_body_entered przedmiotu odwołaj się do systemu punktów: func _on_body_entered(body): if body.name == "Player": body.add_score(value) # Zakładamy, że gracz ma metodęadd_scorequeue_free()

c) Losowe generowanie przedmiotów

Aby generować przedmioty w losowych miejscach:

  1. Dodaj węzeł Timer do sceny gry i ustaw jego czas.
  2. W skrypcie głównej sceny generuj przedmioty w funkcji _on_Timer_timeout: func _on_Timer_timeout(): var item = preload("res://CollectibleItem.tscn").instance() item.global_position = Vector2(randf() * screen_width, randf() * screen_height) add_child(item)

5. Testowanie i debugowanie

  1. Sprawdź kolizje:
    • Włącz opcję Visible Collision Shapes w menu debugowania, aby zobaczyć obszar kolizji przedmiotu.
  2. Monitoruj logi:
    • Używaj print() w funkcji _on_body_entered, aby upewnić się, że zdarzenie działa poprawnie.

6. Rozszerzenie systemu przedmiotów

a) Tworzenie klas różnych przedmiotów

Możesz stworzyć bazowy skrypt dla przedmiotów i dziedziczyć go w innych klasach:

# BaseItem.gd
extends Area2D

@export var value: int = 10

func on_collected(player):
    print("Przedmiot zebrany!")

Następnie dziedzicz w specjalizowanych przedmiotach:

# GoldItem.gd
extends "res://BaseItem.gd"

func on_collected(player):
    player.gold += value
    print("Zebrano złoto!")
    queue_free()

b) Rzadkość przedmiotów

Dodaj różne poziomy rzadkości przedmiotów:

@export var rarity: String = "common"  # Możliwe wartości: "common", "rare", "legendary"

func _ready():
    match rarity:
        "common":
            $Sprite2D.modulate = Color(1, 1, 1)  # Biały
        "rare":
            $Sprite2D.modulate = Color(0, 0, 1)  # Niebieski
        "legendary":
            $Sprite2D.modulate = Color(1, 0.5, 0)  # Pomarańczowy


Podsumowanie

Tworzenie przedmiotów do zbierania w Godot 4 jest proste i elastyczne dzięki użyciu węzłów Area2D i CollisionShape2D. Możesz łatwo dostosować ich zachowanie, dodawać animacje, integrować z systemem punktów czy losowo je generować. Ten fundament można rozbudować, tworząc bardziej zaawansowane systemy, takie jak rzadkość przedmiotów, efekty wizualne czy interakcje z innymi systemami gry.

Published using WordPress Blurt Publisher from https://godot.com.pl.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE BLURT!