CharacterBody3D

in polish •  2 months ago 

CharacterBody3D w Godot 4 to specjalny węzeł fizyki zaprojektowany do kontrolowania postaci w grach 3D. Jest idealny dla graczy i NPC (postacie niezależne), ponieważ umożliwia łatwe zarządzanie ruchem postaci, chodzeniem, skakaniem, zderzeniami i interakcją z terenem. W przeciwieństwie do RigidBody3D, CharacterBody3D nie reaguje na siły fizyczne w sposób dynamiczny, co daje większą kontrolę nad ruchem i zachowaniem postaci.

Cechy CharacterBody3D:

  • Kontrolowany ruch: CharacterBody3D nie reaguje na siły takie jak grawitacja i impulsy fizyczne w sposób dynamiczny, co oznacza, że można łatwo kontrolować jego ruch ręcznie.
  • Obsługa chodzenia, biegania i skakania: Specjalne funkcje pozwalają na tworzenie zachowań typowych dla postaci gracza, takich jak poruszanie się, skakanie, a także detekcja, czy postać jest na ziemi.
  • Kolizje i zderzenia: Automatycznie obsługuje kolizje, umożliwiając bezproblemowe poruszanie się po świecie gry z poprawną interakcją z innymi obiektami.

Jak używać CharacterBody3D:

1. Dodanie CharacterBody3D do sceny

  1. W drzewie scen kliknij „Dodaj węzeł”.
  2. Wyszukaj CharacterBody3D i dodaj go do swojej sceny.
  3. Dodaj jako dziecko CollisionShape3D, aby określić kształt kolizji postaci (np. CapsuleShape3D, która jest idealna dla postaci).

Przykład:

MainScene
├── CharacterBody3D
│   ├── CollisionShape3D (CapsuleShape3D)
└── MeshInstance3D (np. postać gracza)

2. Dodanie siatki postaci

  • Aby wizualnie zobaczyć postać, dodaj MeshInstance3D jako dziecko CharacterBody3D, np. CapsuleMesh lub niestandardowy model 3D twojej postaci.
  • Dopasuj kształt kolizji w CollisionShape3D do siatki, aby kolizja poprawnie obejmowała model postaci.

3. Sterowanie CharacterBody3D za pomocą skryptu

Aby poruszać postacią, możesz użyć metod move_and_slide() lub move_and_collide(), które są specjalnie dostosowane do kontrolowania postaci. move_and_slide() to najczęściej stosowana metoda, ponieważ obsługuje zarówno ruch, jak i zderzenia z innymi obiektami, automatycznie dostosowując się do terenu.

Przykład skryptu do sterowania ruchem postaci:

extends CharacterBody3D

const SPEED = 5.0
const JUMP_VELOCITY = 10.0
const GRAVITY = -20.0

var velocity: Vector3 = Vector3.ZERO

func _physics_process(delta: float) -> void:
# Dodanie grawitacji
if not is_on_floor():
velocity.y += GRAVITY * delta

# Poruszanie postaci
var input_direction = Vector3.ZERO
input_direction.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
input_direction.z = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")
input_direction = input_direction.normalized()

# Ustawienie prędkości poziomej
velocity.x = input_direction.x * SPEED
velocity.z = input_direction.z * SPEED

# Skakanie
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
    velocity.y = JUMP_VELOCITY

# Ruch postaci z obsługą kolizji
velocity = move_and_slide(velocity, Vector3.UP)</code></pre>

Co robi ten skrypt:

  1. Grawitacja: Dodaje wartość grawitacji do velocity.y, gdy postać nie jest na ziemi.
  2. Ruch poziomy: Umożliwia kontrolowanie postaci za pomocą klawiszy strzałek lub przycisków WASD (ui_left, ui_right, ui_up, ui_down).
  3. Skakanie: Sprawdza, czy postać jest na ziemi (is_on_floor()) i czy przycisk skoku został wciśnięty (ui_accept), aby umożliwić skok.
  4. move_and_slide: Wykonuje ruch postaci, obsługując zderzenia i przesuwanie po ziemi. Funkcja ta automatycznie uwzględnia teren i koryguje pozycję postaci.

4. Ustawienia CharacterBody3D w inspektorze

  • Gravity Scale: Skaluje siłę grawitacji działającej na postać. Możesz dostosować ją, aby kontrolować, jak mocno postać jest przyciągana do ziemi.
  • Snap to Ground: Umożliwia przyleganie postaci do powierzchni, na której się znajduje. Może być przydatne, gdy postać porusza się po nierównym terenie.
  • Max Floor Angle: Definiuje maksymalny kąt, po którym postać może się wspinać. Dzięki temu możesz kontrolować, czy postać może poruszać się po stromych powierzchniach.
  • Safe Margin: Zabezpiecza przed zacinaniem się postaci w obiektach przy niskich prędkościach.

5. Różnice między CharacterBody3D a innymi węzłami fizyki

  • CharacterBody3D vs. RigidBody3D: RigidBody3D jest w pełni dynamicznym obiektem fizyki, który reaguje na siły zewnętrzne, jak zderzenia, grawitacja czy impulsy. CharacterBody3D daje więcej kontroli nad ruchem postaci, ponieważ nie reaguje na siły w sposób dynamiczny – ruch musi być kontrolowany ręcznie.
  • CharacterBody3D vs. KinematicBody3D: W Godot 4, CharacterBody3D zastąpił wcześniejszy KinematicBody3D, oferując dodatkowe funkcje ułatwiające pracę z postaciami, takie jak lepsza obsługa zderzeń z podłogą i ścianami oraz automatyczne uwzględnianie skoków i spadków.

6. Przykłady zastosowania CharacterBody3D

  • Postać gracza: Umożliwia łatwe kontrolowanie ruchu gracza, zderzenia z przeszkodami i naturalne chodzenie po nierównych powierzchniach.
  • NPC (postacie niezależne): CharacterBody3D można używać również do postaci sterowanych przez AI, które poruszają się, chodzą po schodach, skaczą, itp.
  • Postacie chodzące po świecie: Idealny do symulacji chodzących postaci, które muszą poruszać się w określonym kierunku bez zacinania się w obiektach.

Podsumowanie:

CharacterBody3D w Godot 4 to kluczowy węzeł do tworzenia postaci, które poruszają się po scenie 3D. Pozwala na precyzyjne sterowanie ruchem, skakaniem i interakcjami z otoczeniem. Dzięki metodzie move_and_slide() łatwo obsługuje kolizje i naturalny ruch po nierównych powierzchniach. W porównaniu do RigidBody3D, CharacterBody3D oferuje większą kontrolę nad ruchem postaci, co czyni go idealnym wyborem dla graczy i NPC w grach.

Czy chciałbyś uzyskać więcej informacji na temat określonych funkcji CharacterBody3D lub przykłady innych skryptów?


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!