AI Steuern über AI Controller oder im New Service?

  • Hi bin bisschen eingearbeitet mit AI's mit Hilfe von Behavior Tree, hab in verschiedenen Tutorials gesehen, dass manche mit dem BP ,,AI Controller'' dort die Logiken bauen z.b wann der AI den Spieler sieht, aber auch schon oft gesehen, dass das Gleiche im ,,New Service'' gebaut wird und dann an ein ,,Selector'' drangehängt wird.


    Bevor ich mich jetzt so richtig austobe würde ich gern eure Erfahrung dazu hören, gibts da irgendwelche Vor und Nachteile? Beides ist ja möglich, was würdet ihr empfehlen.
    Vielen Dank schonmal.

  • Ich finde man kann sich die den Prozess besser Vorstellen in einem Behavior Tree Service.
    Ein Service ist ja eine Aufgabe in Behavior Tree, die immer "parallel" mitläuft, solange dieser mit dem Unter-Ast verbunden ist der gerade läuft. Das heißt man kann recht visuell steuern wann dieser Service laufen soll, und wann nicht. In einem Service hast du auch etwas bessere möglichkeiten die Tick Rate anzupassen. Du musst ja nicht unbedingt jeden Tick checken ob deine AI etwas noch sieht. Das kann auch jede halbe sekunde passieren.
    Ich habe im thread von meinem Projekt früher Mal einen kleinen Post über meinen Behavior Tree gemacht mit paar skizzen. Vielleicht hilft es.


    Falls Behavior Trees neu für dich sind, versuch erst mal damit zu arbeiten. Man kann mit denen auch funktionierende Ergebnisse hinbekommen, wenn man sie falsch benutzt. (Gutes Zeichen dafür dass man einen Behavior Tree nicht als Behavior Tree nutzt ist, wenn es vollgestopft ist mit Decorators). Oft ist es möglich sehr viel kontrolle zu erlangen, wenn man genau versteht wie Sequence und Selector arbeiten und in den Tasks sauber programmiert, wann diese Erfolgreich beendet wird, wann diese mit Misserfolg beendet wird und wann sie abgebrochen wird. Ich sehe zu oft - und ich habe es auch gemacht -, dass Leute versuchen mit Decorators Tasks zu beenden.

  • Danke schonmal für die Tipps, hab auch eingesehen, dass zwar der Anfang mit Behavior Tree bisschen zäh ist, aber auf Dauer die bessere Lösung. Jetzt neue Frage, kann ich zwei Behavior Tree gleichzeitig laufen lassen?


    Ich will bei den AI's z.b einmal den Zustand einstellen ,,agressiv,passiv,neutral'' und parallel dazu ,,mirFolgen, bleiben''. Wie bei WoW Begleitern als Beispiel.


    Da fällt mir nur die Lösung ein, dass mit zwei Behavior Trees zu machen, wenn das geht.

  • Es ist möglich mehrere Behavior Tree's zugleich für einen Controller laufen zu lassen


    Jetzt redest du aber von verschiedenen Zuständen oder verhaltens Profilen. Man könnte daher überlegen ob es z.B. auch Sinnvoll wäre für jeden Zustand einen einen Tree zu erstellen der das Verhalten in dem Zustand darstellt und diese dann zu wechseln (den laufenden BT abstellen und den neuen BT starten), wenn der Zustand wechselt. An sich kann man aber auch durch Decorators was ähnliches in einem Tree hinbekommen. Am besten versuchst du es mal auf paar verschiedene weisen mit kleinen/abstrakten Beispielen, um zu schauen was für dich besser funktioniert.


    Behavior Trees sind eher Entscheidungsbäume (leider ist die Aussage nicht ganz richtig). Man bestimmt in einem Behavior Tree also wie eine AI entscheiden soll, basierend auf dem Ergebnis der vorherigen Aufgabe (Erfolg oder Misserfolg). An sich gibt es viel intersektion mit State Machines, weshalb auch dies immer möglich ist. Jedoch haben in einem Behavior Tree alle Äste eine Hierarchie, wenn du diese Eigenschaft aushebeln willst, wird es unübersichtlich, weil du dafür sorgst dass der BT nicht wie ein BT arbeitet und somit schwer zu lesen wird.



    BTW nett zu lesen:
    https://www.gamasutra.com/blog…_for_AI_How_they_work.php
    http://www.gameaipro.com/ (hier sind paar Paper gesammelt und Spieleentwicklern zu ai, recht viele AAA Entwickler dabei)
    (In Game AI Pro Band 1 gibt es ein paar Kapitel zu BTs)