Jak stworzyć kamerę podążającą płynnie za ruchem w Godot 4?

in polish •  3 days ago 

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

  1. Dodaj węzeł Camera2D jako dziecko postaci (np. Player): Player (Node2D) ├── Camera2D
  2. W Inspector dla Camera2D 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

  1. Dodaj węzeł Camera3D jako dziecko obiektu, który ma być śledzony: Player (Node3D) ├── Camera3D
  2. W Inspector dla Camera3D 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):

  1. Dodaj węzeł Rectangle2D do swojej sceny, który będzie ograniczał obszar.
  2. 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

  1. Przejdź do Project Settings > Input Map.
  2. Dodaj nowe akcje:
    • zoom_in: Przypisz np. klawisz +.
    • zoom_out: Przypisz np. klawisz -.
    • sprint: Przypisz np. klawisz Shift.

5. Debugowanie kamery

Aby upewnić się, że kamera działa poprawnie:

  1. Użyj opcji Debug > Visible Collision Shapes, aby widzieć granice mapy i obiektów.
  2. 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.

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!