Użyj tej techniki, aby ulepszyć ruch i zachowanie wroga, emulując podstawowe widzenie.

Wykrywanie linii wzroku zwiększa złożoność gry dzięki mechanizmowi, który pozwala postaciom lub obiektom postrzegać otoczenie. Możesz użyć tej funkcji do określenia zachowania sztucznej inteligencji wroga, mechaniki widoczności gracza, rozgrywki w ukryciu i nie tylko.

W Godot węzeł RayCast2D oferuje prosty i skuteczny sposób na osiągnięcie wykrywania w polu widzenia.

Konfigurowanie gry Godot

Zanim zagłębisz się w węzły RayCast2D, skonfiguruj podstawowe środowisko gry 2D w Godot 4. Utwórz gracza postać, którą można poruszać się za pomocą klawiatury i wchodzić w interakcję z platformami.

Najpierw utwórz scenę dla postaci gracza. Dodać PostaćCiało2D węzeł jako korzeń sceny. W środku PostaćCiało2D, dodać Kształt kolizji2D o kształcie prostokąta i a Sprite2D dla wizualnej reprezentacji postaci.

Kod użyty w tym artykule jest dostępny w this Repozytorium GitHuba i jest darmowy do użytku na licencji MIT.

Oto kod GDScript ruchu gracza:

instagram viewer
extends CharacterBody2D

var speed = 300

func _physics_process(delta):
var input_dir = Vector2.ZERO

if Input.is_action_pressed("ui_left"):
input_dir.x -= 1

if Input.is_action_pressed("ui_right"):
input_dir.x += 1

if Input.is_action_pressed("ui_up"):
input_dir.y -= 1

if Input.is_action_pressed("ui_down"):
input_dir.y += 1

velocity = input_dir.normalized() * speed
move_and_collide(velocity * delta)

Teraz utwórz platformy, z którymi gracz będzie mógł wchodzić w interakcję. Możesz użyć StatyczneBody2D węzły z odpowiednimi kształtami kolizji reprezentującymi platformy. Ułóż je na scenie, aby stworzyć środowisko platformowe.

Konfigurowanie RayCast2D

Aby utworzyć wykrywanie w linii wzroku, użyj opcji RayCast2D węzeł. Oto jak możesz dodać plik RayCast2D węzeł przy użyciu GDScript:

var raycast: RayCast2D

func _ready():
raycast = RayCast2D.new()
add_child(raycast)

Pamiętaj o dołączeniu tego skryptu do pliku PostaćCiało2D węzeł. Ten fragment kodu tworzy nowy plik RayCast2D węzeł i dołącza go jako element podrzędny do postaci gracza.

Zapewnianie wizualnej informacji zwrotnej na temat interakcji na linii wzroku

Teraz możesz wydrukować wiadomość za każdym razem, gdy linia wzroku gracza przetnie się z platformą. Rzuć promień z pozycji gracza w kierunku ruchu. Jeśli promień zderzy się z obiektem, oznacza to, że gracz ma w polu widzenia platformę.

Dodaj następujący kod do tego samego skryptu:

func _physics_process(delta):
#... (previous movement code)

raycast.target_position = Vector2(100, 0)

if raycast.is_colliding():
print("Collided with platform!")

Oto dane wyjściowe:

Rozszerzanie funkcjonalności RayCast2D

Istnieje wiele zaawansowanych funkcji, których możesz użyć, aby znacznie zwiększyć interaktywność i złożoność gry.

get_collider()

Używając get_collider() metodą można uzyskać dostęp do pierwszego obiektu przeciętego przez promień. Metoda zwraca wartość null, jeśli na ścieżce promienia nie znajduje się żaden obiekt. Jest to szczególnie przydatne przy identyfikowaniu konkretnego obiektu, do którego gracz ma pole widzenia.

if raycast.is_colliding():
var collided_object = raycast.get_collider()

if collided_object:
print("You can see:", collided_object.name)

get_collider_rid()

The get_collider_rid() metoda może podać identyfikator zasobu (RID) pierwszego przecinanego obiektu:

if raycast.is_colliding():
var collider_rid = raycast.get_collider_rid()

if !collider_rid.is_valid():
print("No valid object RID")
else:
print("Object RID:", collider_rid)

get_collider_shape()

The get_collider_shape() funkcja zwraca identyfikator kształtu pierwszego przeciętego obiektu lub 0, jeśli nie występuje żadna kolizja.

if raycast.is_colliding():
var collider_shape = raycast.get_collider_shape()

if collider_shape == 0:
print("No valid shape ID")
else:
print("Shape ID:", collider_shape)

get_collision_normal()

Aby lepiej zrozumieć interakcję, get_collision_normal() dostarcza normalną kształtu w punkcie kolizji. W przypadkach, gdy promień zaczyna się w kształcie i trafienie_z_wewnątrz jest prawdą, zwrócony zostanie normalny wynik Wektor2(0, 0).

if raycast.is_colliding():
var collision_normal = raycast.get_collision_normal()
print("Collision Normal:", collision_normal)

get_collision_point()

Kiedy promień przecina obiekt, get_collision_point() zwraca dokładny punkt kolizji we współrzędnych globalnych.

if raycast.is_colliding():
var collision_point = raycast.get_collision_point()
print("Collision Point:", collision_point)

Korzystając z tych zaawansowanych możliwości RayCast2D węzła, możesz uzyskać krytyczny wgląd w interakcje pomiędzy promieniem a zderzającymi się obiektami.

Metody te umożliwiają zebranie niezbędnych informacji, które mogą znacząco wpłynąć na mechanikę rozgrywki, interakcje z obiektami i opinie graczy.

Zawiera dodatkowe funkcje

Oprócz podstawowej funkcji wykrywania linii wzroku możesz jeszcze bardziej zwiększyć dynamikę gry, wdrażając pewne zaawansowane funkcje.

Wyzwalacze zdarzeń

Zamiast po prostu drukować wiadomość, możesz wywołać określone zdarzenia w grze. Na przykład odkrywanie ukrytych ścieżek, aktywowanie mechanizmów lub ostrzeganie wrogów o obecności gracza może dodać głębi rozgrywce.

Dynamiczne radzenie sobie z przeszkodami

Rozważ scenariusze, w których przeszkody mogą zakłócać pole widzenia. Wdrożenie dynamicznego wykrywania przeszkód gwarantuje, że linia wzroku jest aktualizowana w czasie rzeczywistym, gdy obiekty pojawiają się i znikają z pola widzenia gracza.

Niestandardowe wskaźniki wizualne

Zamiast polegać wyłącznie na tekście, możesz utworzyć niestandardowe wskaźniki wizualne, aby podkreślić obecność interakcji w polu widzenia. Może to obejmować zmianę koloru odtwarzacza lub ikonki obiektu, wyświetlenie ikony lub animowanie odpowiednich elementów.

Mechanika mgły wojny

W przypadku gier strategicznych lub eksploracyjnych możesz wprowadzić mechanikę mgły wojny. Ogranicza to pole widzenia gracza, dopóki nie ustali linii wzroku, stopniowo odsłaniając świat gry i zachęcając do podejmowania strategicznych decyzji.

Najlepsze praktyki w zakresie wykrywania linii wzroku

Optymalizacja wykrywania linii wzroku ma kluczowe znaczenie dla zapewnienia płynnej rozgrywki. Oto kilka najlepszych praktyk, o których warto pamiętać.

Częstotliwość promieni

Unikaj wykonywania promieni w każdej klatce, jeśli nie jest to konieczne. Rozważ sprawdzenie pola widzenia tylko wtedy, gdy pozycja gracza lub otoczenie znacząco się zmienią. Pomaga to ograniczyć niepotrzebne obliczenia.

Długość promienia

Zrównoważ długość promienia. Ekstremalnie długie promienie mogą mieć wpływ na wydajność, dlatego wybierz długość pokrywającą niezbędny obszar, jednocześnie kontrolując obciążenie obliczeniowe.

Warstwy kolizji

Użyj warstw i masek kolizyjnych, aby precyzyjnie określić, które obiekty będą uwzględniane przy wykrywaniu linii wzroku. Zapobiega to niepotrzebnemu promieniowaniu do nieistotnych obiektów.

Buforowanie wyników

Jeśli wykrywasz tę samą linię wzroku dla kilku obiektów lub ramek, rozważ buforowanie wyników, aby uniknąć zbędnych obliczeń.

Integracja na poziomie platformówki

Dopasuj mechanikę wykrywania w polu widzenia do projektu poziomów Twoja gra platformowa. Weź pod uwagę pionowość otoczenia, różne wysokości platform i potencjalne przeszkody, które mogą zakłócać pole widzenia.

Upewnij się, że Twój system wykrywania uwzględnia te niuanse, aby zapewnić płynne i intuicyjne doświadczenie gracza.

Zwiększanie atrakcyjności gier Godot dzięki wykrywaniu linii wzroku

Wykrywanie linii wzroku dodaje głębi i realizmu Twojemu światu gry. Gracze mogą opracowywać strategie, ukrywać wyzwania lub podchodzić do nich w różny sposób, w zależności od swojego pola widzenia. Ta mechanika może zamienić prostą platformówkę w bardziej wciągające doświadczenie, dzięki czemu rozgrywka będzie bardziej wciągająca i zapadająca w pamięć.