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
- W drzewie scen kliknij „Dodaj węzeł”.
- Wyszukaj
CharacterBody3D
i dodaj go do swojej sceny. - 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 dzieckoCharacterBody3D
, 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:
- Grawitacja: Dodaje wartość grawitacji do
velocity.y
, gdy postać nie jest na ziemi.
- Ruch poziomy: Umożliwia kontrolowanie postaci za pomocą klawiszy strzałek lub przycisków WASD (
ui_left
, ui_right
, ui_up
, ui_down
).
- Skakanie: Sprawdza, czy postać jest na ziemi (
is_on_floor()
) i czy przycisk skoku został wciśnięty (ui_accept
), aby umożliwić skok.
- 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.