W Godot 4 możesz stworzyć kamerę, która płynnie podąża za obiektem (np. postacią gracza) w grach 2D i 3D, korzystając z gotowych narzędzi silnika oraz skryptów. Oto szczegółowy przewodnik:
1. Ustawienie kamery w grze 2D
a) Tworzenie kamery
- Dodaj węzeł Camera2D jako dziecko postaci (np.
Player
):Player (Node2D) ├── Camera2D
- W
Inspector
dlaCamera2D
ustaw:- Current: Włącz (sprawia, że kamera jest aktywna).
- Drag Margin: Ustaw marginesy (opcjonalnie, jeśli chcesz, aby kamera nie podążała za graczem do pewnego stopnia).
- Zoom: Możesz dostosować wartość powiększenia kamery (np.
Vector2(1, 1)
).
b) Płynne śledzenie kamery
Aby kamera płynnie podążała za graczem, włącz opcję Smoothing:
- W
Inspector
ustaw:- Smoothing Enabled: Włącz.
- Smoothing Speed: Ustaw wartość, np.
5.0
(większa wartość = szybsze podążanie).
c) Alternatywa – własny skrypt płynnego ruchu kamery
Jeśli chcesz większej kontroli, możesz stworzyć skrypt dla kamery:
extends Camera2D
@export var smooth_speed: float = 5.0
func _process(delta: float):
if get_parent(): # Upewnij się, że kamera jest dzieckiem postaci
global_position = lerp(global_position, get_parent().global_position, delta * smooth_speed)
2. Ustawienie kamery w grze 3D
a) Tworzenie kamery
- Dodaj węzeł Camera3D jako dziecko obiektu, który ma być śledzony:
Player (Node3D) ├── Camera3D
- W
Inspector
dlaCamera3D
upewnij się, że jest aktywna:- Current: Włącz.
b) Płynne śledzenie kamery za pomocą skryptu
Jeśli chcesz, aby kamera płynnie podążała za graczem, dodaj do niej skrypt:
extends Camera3D
@export var smooth_speed: float = 5.0
@export var offset: Vector3 = Vector3(0, 3, -5) # Pozycja kamery względem gracza
func _process(delta: float):
var target_position = get_parent().global_transform.origin + offset
global_transform.origin = lerp(global_transform.origin, target_position, delta * smooth_speed)
c) Obracanie kamery w 3D za graczem
Jeśli chcesz, aby kamera także obracała się w kierunku gracza:
extends Camera3D
@export var smooth_speed: float = 5.0
@export var offset: Vector3 = Vector3(0, 3, -5)
func _process(delta: float):
var target_position = get_parent().global_transform.origin + offset
global_transform.origin = lerp(global_transform.origin, target_position, delta * smooth_speed)
# Obracanie w stronę gracza
look_at(get_parent().global_transform.origin, Vector3.UP)
3. Zaawansowane ustawienia kamery
a) Ograniczenie obszaru kamery w 2D
Aby kamera nie wychodziła poza określony obszar (np. krawędzie mapy):
- Dodaj węzeł Rectangle2D do swojej sceny, który będzie ograniczał obszar.
- W
Camera2D
włącz opcję Limit i ustaw wartości:- Limit Left, Limit Right, Limit Top, Limit Bottom.
b) Dynamiczne dostosowanie zoomu w 2D
Aby kamera automatycznie dostosowywała poziom powiększenia w zależności od akcji:
extends Camera2D
@export var zoom_speed: float = 2.0
@export var min_zoom: Vector2 = Vector2(0.5, 0.5)
@export var max_zoom: Vector2 = Vector2(2, 2)
func _process(delta: float):
if Input.is_action_pressed("zoom_in"):
zoom = lerp(zoom, min_zoom, delta * zoom_speed)
elif Input.is_action_pressed("zoom_out"):
zoom = lerp(zoom, max_zoom, delta * zoom_speed)
c) Dynamiczne dostosowanie pozycji w 3D
Dodaj opcję dynamicznego przesuwania kamery, np. podczas sprintu:
@export var sprint_offset: Vector3 = Vector3(0, 3, -7)
func _process(delta: float):
var target_offset = offset
if Input.is_action_pressed("sprint"):
target_offset = sprint_offset
var target_position = get_parent().global_transform.origin + target_offset
global_transform.origin = lerp(global_transform.origin, target_position, delta * smooth_speed)
4. Definicja akcji w Input Map
- Przejdź do Project Settings > Input Map.
- Dodaj nowe akcje:
zoom_in
: Przypisz np. klawisz+
.zoom_out
: Przypisz np. klawisz-
.sprint
: Przypisz np. klawiszShift
.
5. Debugowanie kamery
Aby upewnić się, że kamera działa poprawnie:
- Użyj opcji Debug > Visible Collision Shapes, aby widzieć granice mapy i obiektów.
- Włącz opcję Remote Transform w kamerze, aby śledzić jej pozycję w czasie rzeczywistym.
Podsumowanie
Płynne śledzenie kamery w Godot 4 można zrealizować na wiele sposobów:
- W 2D: Użyj
Camera2D
z włączonym smoothingiem lub stwórz własny skrypt. - W 3D: Użyj
Camera3D
z offsetem i funkcjąlerp
do płynnego ruchu.
Dostosowanie ustawień do konkretnej gry (np. ograniczenie obszaru, dynamiczne zoomowanie) pozwala na stworzenie bardziej zaawansowanych i intuicyjnych mechanik kamery. Dzięki elastycznym narzędziom Godot 4 możesz szybko osiągnąć pożądane efekty.