Verwenden Sie diese Technik, um die Bewegung und das Verhalten des Feindes zu verbessern, indem Sie die grundlegende Sicht nachahmen.

Die Sichtlinienerkennung erhöht die Komplexität Ihres Spiels durch einen Mechanismus, der es Charakteren oder Objekten ermöglicht, ihre Umgebung wahrzunehmen. Sie können diese Funktion für das Verhalten der feindlichen KI, die Sichtbarkeitsmechanik der Spieler, das Stealth-Gameplay und mehr verwenden.

In Godot bietet der RayCast2D-Knoten eine einfache und effiziente Möglichkeit, eine Sichtlinienerkennung zu erreichen.

Einrichten des Godot-Spiels

Bevor Sie in RayCast2D-Knoten eintauchen, richten Sie eine grundlegende 2D-Spielumgebung in Godot 4 ein. Erstelle einen Spieler Zeichen, das sich über Tastatureingaben bewegen kann und mit Plattformen interagieren.

Erstellen Sie zunächst eine Szene für den Spielercharakter. Füge hinzu ein CharacterBody2D Knoten als Wurzel der Szene. Im Inneren CharacterBody2D, füge hinzu ein CollisionShape2D mit einer rechteckigen Form und a Sprite2D für die visuelle Darstellung des Charakters.

Der in diesem Artikel verwendete Code ist hier verfügbar GitHub-Repository Die Nutzung steht Ihnen unter der MIT-Lizenz kostenlos zur Verfügung.

Hier ist der GDScript-Code für die Spielerbewegung:

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)

Erstellen Sie nun einige Plattformen, mit denen der Spieler interagieren kann. Sie können verwenden StaticBody2D Knoten mit geeigneten Kollisionsformen zur Darstellung der Plattformen. Ordnen Sie sie in der Szene an, um eine Plattformumgebung zu schaffen.

RayCast2D einrichten

Um eine Sichtlinienerkennung zu erstellen, verwenden Sie die RayCast2D Knoten. So können Sie eine hinzufügen RayCast2D Knoten mit GDScript:

var raycast: RayCast2D

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

Stellen Sie sicher, dass Sie dieses Skript anhängen CharacterBody2D Knoten. Dieses Code-Snippet erstellt ein neues RayCast2D Knoten und hängt ihn als untergeordnetes Element an den Spielercharakter an.

Bereitstellung von visuellem Feedback zur Sichtlinieninteraktion

Jetzt können Sie eine Nachricht ausdrucken, wenn die Sichtlinie des Spielers eine Plattform schneidet. Wirf einen Strahl von der Position des Spielers in Bewegungsrichtung. Wenn der Strahl mit einem Objekt kollidiert, bedeutet dies, dass der Spieler Sichtlinie zu einer Plattform hat.

Fügen Sie dem gleichen Skript den folgenden Code hinzu:

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

raycast.target_position = Vector2(100, 0)

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

Hier ist die Ausgabe:

Erweiterung der Funktionalität von RayCast2D

Es gibt viele erweiterte Funktionen, mit denen Sie die Interaktivität und Komplexität Ihres Spiels deutlich verbessern können.

get_collider()

Verwendung der get_collider() Mit dieser Methode können Sie auf das erste vom Strahl geschnittene Objekt zugreifen. Die Methode gibt null zurück, wenn sich kein Objekt im Pfad des Strahls befindet. Dies ist besonders hilfreich, um das spezifische Objekt zu identifizieren, zu dem Ihr Spieler eine Sichtlinie hat.

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

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

get_collider_rid()

Der get_collider_rid() Die Methode kann Ihnen die Ressourcen-ID (RID) des ersten Schnittobjekts mitteilen:

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()

Der get_collider_shape() Die Funktion gibt die Form-ID des ersten geschnittenen Objekts zurück oder 0, wenn keine Kollision auftritt.

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()

Um die Interaktion besser zu verstehen, get_collision_normal() liefert Ihnen die Normale der Form am Kollisionspunkt. In Fällen, in denen der Strahl innerhalb der Form beginnt und hit_from_inside wahr ist, wird die normale Rückgabe sein Vektor2(0, 0).

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

get_collision_point()

Wenn der Strahl ein Objekt schneidet, get_collision_point() gibt den genauen Kollisionspunkt in globalen Koordinaten zurück.

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

Mit diesen erweiterten Funktionen des RayCast2D Knoten können Sie wichtige Einblicke in die Wechselwirkungen zwischen dem Strahl und kollidierenden Objekten gewinnen.

Mit diesen Methoden können Sie wichtige Informationen sammeln, die sich erheblich auf die Spielmechanik, Objektinteraktionen und das Spieler-Feedback auswirken können.

Inklusive zusätzlicher Funktionen

Neben der Kernfunktionalität zur Sichtlinienerkennung können Sie die Dynamik Ihres Spiels durch die Implementierung einiger erweiterter Funktionen weiter verbessern.

Ereignisauslöser

Anstatt nur eine Nachricht auszudrucken, können Sie bestimmte Ereignisse im Spiel auslösen. Wenn Sie beispielsweise versteckte Pfade aufdecken, Mechanismen aktivieren oder Feinde auf die Anwesenheit des Spielers aufmerksam machen, können Sie Ihrem Gameplay mehr Tiefe verleihen.

Dynamische Hindernisbehandlung

Denken Sie an Szenarien, in denen Hindernisse die Sichtlinie behindern können. Durch die Implementierung einer dynamischen Hinderniserkennung wird sichergestellt, dass die Sichtlinie in Echtzeit aktualisiert wird, wenn sich Objekte in die Sicht des Spielers hinein und aus dieser heraus bewegen.

Benutzerdefinierte visuelle Indikatoren

Anstatt sich ausschließlich auf Text zu verlassen, können Sie benutzerdefinierte visuelle Indikatoren erstellen, um das Vorhandensein von Interaktionen innerhalb der Sichtlinie hervorzuheben. Dies könnte das Ändern der Farbe des Spieler- oder Objekt-Sprites, das Anzeigen eines Symbols usw. umfassen Animieren relevanter Elemente.

Mechanik des Nebels des Krieges

Bei Strategie- oder Erkundungsspielen können Sie die Nebel-des-Kriegs-Mechanik einführen. Dies schränkt die Sicht des Spielers ein, bis er eine Sichtlinie hergestellt hat, wodurch die Spielwelt nach und nach freigelegt wird und strategische Entscheidungen gefördert werden.

Best Practices für die Sichtlinienerkennung

Die Optimierung der Sichtlinienerkennung ist entscheidend für ein reibungsloses Spielerlebnis. Hier sind einige Best Practices, die Sie beachten sollten.

Raycast-Frequenz

Vermeiden Sie die Durchführung von Raycasts bei jedem Frame, wenn dies nicht erforderlich ist. Prüfen Sie die Sichtlinie nur dann, wenn sich die Position des Spielers oder die Umgebung erheblich ändert. Dies trägt dazu bei, unnötige Berechnungen zu reduzieren.

Strahllänge

Passen Sie die Länge Ihres Raycasts an. Extrem lange Strahlen können die Leistung beeinträchtigen. Wählen Sie daher eine Länge, die den erforderlichen Bereich abdeckt und gleichzeitig die Rechenlast unter Kontrolle hält.

Kollisionsschichten

Verwenden Sie Kollisionsebenen und Masken, um genau festzulegen, welche Objekte bei der Sichtlinienerkennung berücksichtigt werden. Dies verhindert unnötige Raycasts an irrelevante Objekte.

Ergebnisse zwischenspeichern

Wenn Sie die gleiche Sichtlinienerkennung für mehrere Objekte oder Frames durchführen, sollten Sie die Ergebnisse zwischenspeichern, um redundante Berechnungen zu vermeiden.

Integration auf Plattformebene

Passen Sie Ihre Mechanik zur Sichtlinienerkennung an das Leveldesign von an Dein Plattformspiel. Berücksichtigen Sie die Vertikalität der Umgebung, unterschiedliche Plattformhöhen und mögliche Hindernisse, die die Sichtlinie behindern könnten.

Stellen Sie sicher, dass Ihr Erkennungssystem diese Nuancen berücksichtigt, um ein nahtloses und intuitives Spielerlebnis zu schaffen.

Machen Sie Godot-Spiele mit Sichtlinienerkennung ansprechender

Die Sichtlinienerkennung verleiht Ihrer Spielwelt Tiefe und Realismus. Spieler können je nach Blickrichtung Strategien entwickeln, sich verstecken oder Herausforderungen unterschiedlich angehen. Diese Mechanik kann ein einfaches Plattformspiel in ein immersiveres Erlebnis verwandeln und das Gameplay ansprechender und unvergesslicher machen.