Lenkverhalten verstehen Flucht und Ankunft

Lenkungsverhalten soll dazu beitragen, dass sich autonome Charaktere auf realistische Weise bewegen, indem sie mit einfachen Kräften eine realistische, improvisatorische Navigation erzeugen. In diesem Tutorial werde ich das behandeln fliehen Verhalten, das den Charakter dazu bewegt, sich von einem Verfolger zu entfernen, und das Ankunft Verhalten, das den Charakter verlangsamt und stoppt, wenn er sich einem Ziel nähert.

Hinweis: Obwohl dieses Tutorial mit AS3 und Flash geschrieben wurde, sollten Sie in der Lage sein, in fast jeder Spieleentwicklungsumgebung dieselben Techniken und Konzepte anzuwenden. Sie müssen ein grundlegendes Verständnis von mathematischen Vektoren haben.


Weg rennen

Das zuvor beschriebene Suchverhalten basiert auf zwei Kräften, die den Charakter in Richtung des Ziels drücken: die gewünschte Geschwindigkeit und die Lenkung.

gewünschte Geschwindigkeit = normalisieren (Zielposition) * max_velocity Lenkung = gewünschte Geschwindigkeit - Geschwindigkeit

Das gewünschte_Geschwindigkeit, In diesem Fall ist der kürzeste Pfad zwischen dem Zeichen und dem Ziel. Sie wird berechnet, indem die Position des Ziels von der Position des Charakters abgezogen wird. Das Ergebnis ist ein Kraftvektor, der aus dem Charakter in Richtung der Ziel.


Verhalten suchen

Das Fluchtverhalten verwendet dieselben zwei Kräfte, aber sie werden angepasst, um den Charakter zum Laufen zu bringen Weg vom ziel:


Flucht Verhalten

Das neue gewünschte_Geschwindigkeit Vektor wird durch Subtrahieren von berechnet Zeichen Position von der Ziel Position, die einen Vektor erzeugt, der von der Ziel in Richtung der Charakter

Die resultierenden Kräfte werden fast genauso berechnet wie im Suchverhalten:

gewünschte Geschwindigkeit = normalisieren (Position - Ziel) * max_velocity Lenkung = gewünschte Geschwindigkeit - Geschwindigkeit

Das gewünschte_Geschwindigkeit In diesem Fall handelt es sich um die einfachste Fluchtweg, mit der der Charakter vom Ziel weglaufen kann. Durch die Lenkkraft verlässt der Charakter seine aktuelle Route und drückt ihn in Richtung des gewünschten Geschwindigkeitsvektors.

Vergleicht man den gewünschten Geschwindigkeitsvektor des Fliehverhaltens mit dem gewünschten Geschwindigkeitsvektor des Suchverhaltens, kann die folgende Beziehung hergestellt werden:

flee_desired_velocity = -seek_desired_velocity

Mit anderen Worten, ein Vektor ist das Negative des anderen.


Fluchtkräfte hinzufügen

Nachdem die Lenkkraft berechnet wurde, muss sie zum Geschwindigkeitsvektor des Charakters addiert werden. Da diese Kraft den Charakter vom Ziel wegstößt, wird sich jedes Bild des Charakters auf das Ziel zu bewegen und beginnt sich von ihm weg zu bewegen, wodurch ein Bild erzeugt wird fliehen weg (die orange Kurve in der Abbildung unten):

Die Addition dieser Kräfte und die endgültige Geschwindigkeits- / Positionsberechnung werden wie zuvor behandelt. Nachfolgend sehen Sie eine Demo, die mehrere Charaktere zeigt, die das Fluchtverhalten ausführen:


Bewegen Sie die Maus, um das Ziel zu verschieben.

Jedes Zeichen wird mit einer zufälligen Geschwindigkeit im Zentrum des Bewegungsbereichs platziert. Sie versuchen, vor dem Ziel (dem Mauszeiger) zu fliehen. Durch die Addition aller Kräfte verlässt jeder Charakter seine aktuelle Route und flieht vor dem Ziel.

Derzeit wirkt sich das Ziel auf jeden Charakter aus und ignoriert die Entfernung von ihm. es hätte sich auf einen "Effektbereich" beschränken können, in den der Charakter nur fliehen würde, wenn er nahe genug an dem Ziel ist.


Ankunft

Das Suchverhalten bewegt, wie wir gesehen haben, einen Charakter auf ein Ziel zu. Wenn er das Ziel erreicht, wirkt die Lenkkraft nach denselben Regeln weiter, wodurch der Charakter um das Ziel herum "hüpft".


Das Suchverhalten. Bewegen Sie die Maus, um das Ziel zu verschieben.

Das Ankunft Verhalten verhindert, dass sich der Charakter durch das Ziel bewegt. Dadurch verlangsamt sich der Charakter, wenn er sich dem Ziel nähert, und bleibt schließlich am Ziel stehen.

Das Verhalten besteht aus zwei Phasen. In der ersten Phase ist der Charakter weit vom Ziel entfernt und funktioniert genauso wie das Suchverhalten (bewegt sich mit voller Geschwindigkeit auf das Ziel zu.).

Die zweite Phase ist, wenn sich der Charakter in der Nähe des Ziels befindet, innerhalb des "langsamen Bereichs" (ein Kreis, der sich an der Position des Ziels befindet):

Wenn der Charakter den Kreis betritt, wird er langsamer bis zum Ziel.


Verlangsamen

Wenn der Charakter den langsamen Bereich betritt, wird seine Geschwindigkeit linear auf null heruntergefahren. Dies wird durch Hinzufügen einer neuen Lenkkraft erreicht (die Ankunft Kraft) zum Geschwindigkeitsvektor des Charakters. Das Ergebnis dieser Addition wird schließlich zu Null, was bedeutet, dass der Position des Charakters bei jedem Frame nichts hinzugefügt wird (es wird also keine Bewegung erfolgen):

// Wenn (Geschwindigkeit + Lenkung) gleich Null ist, gibt es keine Bewegungsgeschwindigkeit = verkürzt (Geschwindigkeit + Lenkung, max_speed) Position = Position + Geschwindigkeitsfunktion wird gekürzt (Vektor: Vector3D, max: Number): void var i: Number; i = max / Vektor.Länge; i = i < 1.0 ? i : 1.0; vector.scaleBy(i); 

Um sicherzustellen, dass sich der Charakter allmählich verlangsamt, bevor er stoppt, sollte die Geschwindigkeit nicht sofort Null werden. Der allmähliche Verlangsamungsprozess wird basierend auf dem Radius des Verlangsamungsbereichs und der Entfernung zwischen dem Charakter und dem Ziel berechnet:

// Berechne die gewünschte Geschwindigkeit gewünschter Geschwindigkeit = Ziel - Positionsentfernung = Länge (gewünschte Geschwindigkeit) // Prüfe die Entfernung, um festzustellen, ob sich das Zeichen // innerhalb des langsamen Bereichs befindet, wenn (Entfernung < slowingRadius)  // Inside the slowing area desired_velocity = normalize(desired_velocity) * max_velocity * (distance / slowingRadius)  else  // Outside the slowing area. desired_velocity = normalize(desired_velocity) * max_velocity  // Set the steering based on this steering = desired_velocity - velocity

Wenn der Abstand größer ist als verlangsamenRadius, Dies bedeutet, dass der Charakter weit vom Ziel entfernt ist und seine Geschwindigkeit beibehalten werden sollte max_velocity.

Wenn der Abstand kleiner ist als verlangsamenRadius, Dies bedeutet, dass der Charakter den langsamen Bereich betreten hat und seine Geschwindigkeit verringert werden sollte.

Der Begriff Entfernung / VerlangsamungRadius wird von variieren 1 (wann Entfernung gleich verlangsamenRadius) zu 0 (wann Entfernung ist fast Null). Diese lineare Variation verlangsamt die Geschwindigkeit reibungslos:

Wie zuvor beschrieben, wird die Zeichenbewegung wie folgt ausgeführt:

Lenkung = gewünschte Geschwindigkeit - Geschwindigkeit Geschwindigkeit = verkürzt (Geschwindigkeit + Lenkung, max_Geschwindigkeit) Position = Position + Geschwindigkeit

Wenn die gewünschte Geschwindigkeit auf null heruntergefahren wird, wird die Lenkkraft -Geschwindigkeit. Wenn diese Lenkkraft zu der Geschwindigkeit addiert wird, führt dies zu einem Nullpunkt, wodurch der Charakter aufhört, sich zu bewegen.

Unten ist eine Demo, die das Ankunftsverhalten zeigt:


Bewegen Sie die Maus, um das Ziel zu verschieben.

Was das Ankunftsverhalten tatsächlich bewirkt, ist die Berechnung einer Kraft, die gleich ist -Geschwindigkeit, Verhindern, dass sich der Charakter bewegt, solange diese Kraft vorhanden ist. Der ursprüngliche Geschwindigkeitsvektor des Charakters ändert sich nicht und er arbeitet weiter, wird jedoch durch die Lenkaddition auf Null gesetzt.

Wenn die Ankunftslenkkraft angehoben wird, bewegt sich der Charakter erneut mit seinem ursprünglichen Geschwindigkeitsvektor.


Fazit

Das Fluchtverhalten bewegt den Charakter vom gewünschten Ziel weg, während das Ankunftsverhalten ihn verlangsamt und an der Position des Ziels stoppt. Beide können zum Beispiel verwendet werden, um fließende Fluchtbewegungen oder Bewegungsmuster zu erstellen. Sie können auch kombiniert werden, um noch komplexere Bewegungen zu erzeugen.

In diesem Tutorial wurde mehr über das Lenkverhalten beschrieben, das Flucht- und das Ankunftsverhalten. In den nächsten Beiträgen werden wir mehr über Verhaltensweisen erfahren. Bleiben Sie auf dem Laufenden, indem Sie uns auf Twitter, Facebook oder Google folgen+.