UPawnSensingComponent, wie geht ihr damit um?

  • Ich habe diese Komponente zum AIController.cpp im Constructor hinzugefügt.


    PawnSensingComp = CreateDefaultSubobject<UPawnSensingComponent>(TEXT("PawnSensingComp"));


    Zu BeginPlay


    PawnSensingComp->OnSeePawn.AddDynamic(this, &AMyAIController::OnPawnSeen);


    Die folgende Funktion wird nun ausgeführt, wenn die KI einen Feind sieht wird die Variable im Blackboard mit der Position des gesehenen Gegners gefüllt, so weit so gut, mein Problem oder meine Frage, wenn die KI keinen Feind sieht, soll sie auch etwas tun, ist das irgendwie möglich? Oder wie geht ihr mit dem visuellen Verhalten der KI um ? Vielen Dank.


    void AMyAIController::OnPawnSeen(APawn* SeenPawn)
    {
    GetBlackboardComponent()->SetValueAsVector(TEXT("LetzterOrt"), SeenPawn->GetActorLocation());
    }

  • Pawn Sensing ist nur ne Component. Du brauchst nen Behaviour Tree in dem du festlegst was die AI so machen soll. Grundsätzlich machst du das mit selectors wo du Bedingungen festlegst. Die rufen dann die entsprechende Sequenz auf. Sagen wir mal kein Feind zu sehen - "Lauf dumm herum". Feind zu sehen - "dreh dich richtung feind, geh zum Feind, greif an".


    Hier ist ein schönes Tutorial. ist zwar BP aber die grundlagen für Behaviour Tree und Sequences gelten in C++ sicherlich genau so:


    https://www.raywenderlich.com/…l-artificial-intelligence

  • Danke, BehaviortTree und Blackboard kenn ich, mein Problem ist, dass "OnSeePawn" nur tickt, wenn Gegner gesehen wird, aber nicht tickt, wenn niemand zu sehen wird. So lässt sich eine Bedingung zwar im BehaviorTree einschalten, aber nicht mehr ausschalten, das ist mein Problem, dafür muss es ne Lösung geben, kenne ich aber nicht.