Nach meinem Verständnis für Verhaltensbäume sollte jedes Verhalten eine kurze, zielorientierte Aktion sein, die in wenigen Iterationen ausgeführt werden kann.
So ist zum Beispiel unten ein Bild eines Verhaltensbaums:
Nehmen wir nun an, dass das Verhalten von Drive To Enemy mehr als ein paar Iterationen in der Struktur erfordert. Bei jedem Durchgang wird Drive To Enemy aufgerufen, da es sich jetzt im laufenden Zustand befindet.
Das Problem ist, dass ich Evade Enemy anrufen möchte, wenn ein Feind in der Nähe ist. Und wenn man bedenkt, dass Drive To Enemy immer heißt, bekomme ich nie die Chance, Evade Enemy anzurufen ( sollte wahrscheinlich Avoid Enemy heißen ).
- Soll ich den Tree EACH- Pass durchlaufen, unabhängig davon, welche Aktion gerade ausgeführt wird?
- Gehe ich das richtig an?
- Wie gehe ich mit einem solchen Verhalten richtig um?
Ursprünglich auf Stackoverflow gefragt. Ich dachte, hier wäre ein geeigneterer Ort, um diese Frage zu stellen.
Antworten:
Siehe das Bild, das ich in meiner vorherigen Antwort zur Verfügung gestellt habe :
Wenn Sie sich vorstellen, dass Knoten 1 "Evade Enemy" und Knoten 2 "Chase Enemy" ist, werden Sie dies auch in der zweiten Iteration sehen (wenn alles grün ist, außer "2" und "B", wenn die zweite Iteration ist) startet), wird 'Evade Enemy' immer noch zuerst überprüft. Erst wenn "Ausweichen" fehlschlägt, weil sich keine Feinde in der Nähe befinden, wird "Verfolgen" erneut aktiviert. Wenn 'Chase Enemy' erneut aufgerufen wird, wird festgestellt, dass es sich im Status 'running' befindet, und es wird direkt zu 'B' gesprungen.
Dies bedeutet, dass der Baum bei jeder Überprüfung immer von links nach rechts verschoben wird. Auch wenn ein Knoten als aktiv markiert ist, werden die Knoten mit der höheren Priorität zuerst überprüft.
Ich bin mir nicht sicher, ob Sie beabsichtigen, Ihre Knoten von rechts nach links zu verarbeiten, aber so scheinen Sie sie angeordnet zu haben (dh unter Ausweichfeind befindet sich der Feind rechts vom Antrieb in entgegengesetzter Richtung). Wenn Sie weitere Erklärungen benötigen, sollten Sie im Chat oder in einer Ihrer bestehenden Fragen zum Thema nachfragen.
quelle