Jak dodawać kolizje w Godot?

in polish •  yesterday 

Kolizje w Godot są realizowane za pomocą specjalnych węzłów fizycznych i kształtów kolizyjnych. W tej instrukcji przejdziemy przez różne aspekty tworzenia kolizji, uwzględniając zarówno gry 2D, jak i 3D. Wersja Godot 4 wprowadza liczne ulepszenia w tym zakresie.


Rodzaje węzłów kolizyjnych

  1. StaticBody:
    • Przeznaczone dla nieruchomych obiektów, takich jak ściany, podłogi czy tła.
    • Przykład: Budynki w grze.
    • Wymagany komponent: CollisionShape lub CollisionPolygon.
  2. RigidBody:
    • Dynamiczne obiekty podlegające prawom fizyki, takie jak siły, grawitacja czy zderzenia.
    • Przykład: Piłka odbijająca się od podłoża.
    • Wymagany komponent: CollisionShape.
  3. KinematicBody:
    • Służy do kontrolowania obiektów poprzez skrypty (np. postaci gracza).
    • Przykład: Postać chodząca po mapie.
    • Wymagany komponent: CollisionShape.
  4. Area:
    • Używane do wykrywania obecności innych obiektów w określonym obszarze.
    • Przykład: Pułapki, strefy wykrywania wrogów.
    • Wymagany komponent: CollisionShape.

Kroki do implementacji kolizji

  1. Dodanie węzła kolizyjnego:
    • Dodaj odpowiedni węzeł, np. StaticBody3D, KinematicBody2D.
    • Dodaj jako dziecko węzeł CollisionShape lub CollisionPolygon.
  2. Ustawienie kształtu kolizji:
    • W CollisionShape ustaw typ kształtu:
      • BoxShape: Prostopadłościan.
      • SphereShape: Kula.
      • CapsuleShape: Kapsuła (często używana dla postaci).
      • ConvexPolygonShape: Skomplikowane obiekty 3D.
      • CustomPolygon: Dla 2D można używać wielokątów.
  3. Skrypty obsługujące kolizje:
    • Dla KinematicBody: Użyj funkcji move_and_slide() lub move_and_collide(), aby zarządzać ruchem i kolizjami.
    • Przykład: extends KinematicBody3D var velocity = Vector3.ZERO func _physics_process(delta): velocity = Vector3(0, -9.8, 0) # Grawitacja velocity = move_and_slide(velocity)
  4. Obsługa zdarzeń w Area:
    • Włącz sygnały, takie jak body_entered lub area_entered, aby reagować na kolizje.
    • Przykład: extends Area3D func _on_area_entered(body): print("Obiekt wszedł do obszaru!")

Rozwiązania specyficzne dla 2D i 3D

  • 2D:
    • Używaj odpowiedników węzłów: StaticBody2D, KinematicBody2D, RigidBody2D, Area2D.
    • Typowe kształty kolizyjne to: RectangleShape2D, CircleShape2D, PolygonShape2D.
  • 3D:
    • Węzły to StaticBody3D, KinematicBody3D, RigidBody3D, Area3D.
    • Typowe kształty kolizyjne: BoxShape, SphereShape, CapsuleShape.

Debugowanie kolizji

Aby zweryfikować poprawność ustawień kolizji:

  1. Włącz opcję Visible Collision Shapes w menu Debug.
  2. Sprawdź, czy kształty kolizyjne są poprawnie dopasowane do obiektów w grze.

Zaawansowane aspekty kolizji

  1. Maski warstw (Collision Layers i Masks):
    • Służą do precyzyjnego określania, które obiekty mogą wchodzić w kolizję.
    • Przykład: Gracz (Layer 1) koliduje tylko z przeszkodami (Maska 2).
  2. Złożone kształty kolizyjne:
    • Dla modeli 3D możesz użyć ConvexDecomposition lub zaimportować gotowe kształty z programu do modelowania (np. Blender).
  3. Kolizje dla animacji:
    • Animacje mogą dynamicznie zmieniać kształt kolizyjny poprzez zmiany w CollisionShape.
  4. Fizyka GPU:
    • Godot 4 obsługuje shadery obliczeniowe (Compute Shaders), co może być wykorzystane w złożonych symulacjach kolizji.

Przykład: Postać gracza z kolizjami

extends KinematicBody3D

var speed = 5.0
var velocity = Vector3.ZERO

func _process(delta):
    var input_dir = Vector3(
        Input.get_action_strength("move_right") - Input.get_action_strength("move_left"),
        0,
        Input.get_action_strength("move_backward") - Input.get_action_strength("move_forward")
    )
    if input_dir.length() > 0:
        input_dir = input_dir.normalized()
    velocity = input_dir * speed
    velocity = move_and_slide(velocity)


Podsumowanie

Kolizje w Godot są elastyczne i dostosowane zarówno do prostych, jak i złożonych projektów. Kluczowe aspekty to właściwe dobranie typu węzła kolizyjnego, konfiguracja kształtów oraz użycie skryptów do obsługi logiki kolizji. Godot 4 oferuje narzędzia zarówno dla gier 2D, jak i 3D, które umożliwiają szybkie prototypowanie i rozwijanie zaawansowanych systemów kolizji.

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!