AI soll schießen während sie läuft

  • Hi Jungens, nun ist es soweit, die AI läuft schön herum, alles im BehaviortTree eingerichtet. Nun will ich dort auch hinzufügen, dass sie auf mich schießt, während die aber weiter läuft.

    Wie geht ihr da vor?


    Ich weiß wohl, dass es ein Node "SimpleParallel" gibt. Aber so richtig schlau werde ich aus dieser Node nicht, kann mir jemand diese mal richtig erklären, hab schon alles probiert.

    Ich habe ja eine ganze Abfolge von Nodes, was die AI machen soll, diese Abfolge kann ich an SimpleParallel garnicht anbinden.


    Danke schonmal.

  • Simple Parallel wäre schon ein weg das zu machen:

    Simple Parallel, hat ein Anbindung zu einer Task Node und eine zu eine zu einem sub tree.

    Ein wenig Hintergrund: Das Konzept der Behavior Tree's sieht keine Parallele ausführung von Tree's innerhalb eines Behavior Tree's vor. Von daher solltest du es dir gut überlegen, denn zu weichst von der Theorie der Behavior Trees ab.

    Meistens sehe ich das als Warnzeichen, dass du Behavior Tree's nutzt, aber deine Überlegungen zur Implementierung eigentlich kein Behavior Tree ist. (Habe den Fehler selbst schon am Anfang gemacht)


    Der Parallel Node ist von daher ein Node der eine Main Task Ausführt, und parallel dazu einen Sub Tree. Die Main Task ist die Primäre Task, die den Node Steuert. Wenn diese Task mit einem success oder failure beendet wird, so wird entsprechend des drüber liegenden Nodes (z.B. Sequence oder Select) weiter gemacht.


    Bei mir sah es wie folgt aus:


    In diesem Fall ist es so dass es einen Combat Node gab, in dem die Main Task das Feuern und Zielen übernimmt, und parallel dazu die Bewegung lief. Wenn diese Task fehlschlägt, so kommt man durch den Select in den nächsten Node eine Art Reload Task. Diese initiert das nachladen, und es findet parallel eine Bewegung in Deckung statt. Schlägt dies fehl (keine Munition, oder kein Nachladen nötig), so kommt man in die Verfolgen Task, etc. Bei einem Success sorgt der Select dafür dass der ganze Baum neugestartet wird. D.h. wenn der Combat Node sich erfolgreich beendet (z.B.) Ziel ist eliminiert, dann wird der Baum neugestartet ein neues Ziel gesucht und die möglichen Aktionen werden abgearbeitet.

    Was ich heutzutage anders machen würde ist, dass ich als Decorator keine Perception hatte. Dies ist aber viel zu Performancehungrid und ich hätte dies als Task machen sollen, die ausgeführt wird, wenn ein neues Ziel gesucht wird.


    ist aber bei weitem nicht perfekt und ich würde einiges anders machen.

    Mir ist am Ende auch aufgefallen, dass Gegner die sich bewegen und schießen, etwas zu schwer waren, gerade in Kombination mit einem sehr fiesen Recoil Modell.

  • Mein Problem ist, dass der SubTree am SimpleParallel nicht ausgeführt wird. Nur der Task Node wird ausgeführt, hier mein "WaffeFeuern" Node.

    Welche Voraussetzung muss also erfüllt sein, damit dieser auch ausgeführt wird.

    Hier mein Bild:




    Wenn ich hingegen meinen Node "WaffeFeuern" durch den Standard Node "Wait" ersetze, dann wird der SubTree auch gleichzeitig ausgeführt. Was ist also anders?



    So sieht mein eigener Task aus:


    EBTNodeResult::Type UBT_WaffeFeuern::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)

    {

    Super::ExecuteTask(OwnerComp, NodeMemory);


    AEnemyController* MeinEnemyController = Cast<AEnemyController>(OwnerComp.GetAIOwner());


    if (MeinEnemyController)

    {

    AEnemyCharacter* MeinEnemyCharacter = MeinEnemyController->GetEnemyCharacter();

    if (MeinEnemyCharacter)

    {

    MeinEnemyCharacter->FeuernWaffe();


    return EBTNodeResult::Succeeded;

    }

    }

    return EBTNodeResult::Failed;

    }

    • Hilfreich

    Das wichtige hierbei ist, dass Waffe Feuern eine Task ist, die Dauerhaft läuft, bis diese beendet ist (Succeeded) oder fehlschläft (Failed)

    Deine Feuern Task benötigt nur einen Tick, d.h. dein Subtree wird sofort abgebrochen.


    Die Lösung wäre eine Waffe Feuern Task, welche läuft, bis eine andere Aufgabe ansteht. Also eher eine "Zielen und Feuern wenn Gegner Anvisiert ist, bis ich nicht mehr kann oder will"-Task ist.