Beiträge von JonnyMachony

    Hi Männers, manchmal habe ich den Eindruck, dass ich bei C++ noch nicht alles durchblicke.

    Wäre super, wenn sich das einer mal anschauen kann, danke schonmal.

    Also ich will, dass ein Geschoss vom Gewehrlauf spawnt und zu einem zufälligen Ort am Ende eines Kegels auftrifft. Die nötigen Funktionen hab ich auch, aber irgendwas übersehe ich wohl noch.

    Hier die nötigen Funktionen:


    ich erkläre kurz die Variablen:

    "SocketTransform.GetLocation()" ist das Ende des Gewehrlaufes

    Rest der Variablen ist selbserklärend. Was ist falsch? Bzw, viel wichtiger, wie wäre es richtig?


    Vielen vielen Dank




    float HalberRadius = FMath::DegreesToRadians(8.f);

    FVector EndVector = FMath::VRandCone(SocketTransform.GetLocation(), HalberRadius, HalberRadius);


    FRotator GewehrRotator = UKismetMathLibrary::FindLookAtRotation(SocketTransform.GetLocation(), EndVector);


    FActorSpawnParameters SpawnParams;

    GetWorld()->SpawnActor<ARifle_Geschoss>(GeschossBP, SocketTransform.GetLocation(), GewehrRotator, SpawnParams);

    Jungens, bisher läuft bei mir Vieles über Probieren geht über studieren.

    Wird aber langsam sehr unübersichtlich. Ich habe gerade richtig Probleme mit dem Verständnis über:

    Wenn man im BehaviorTree einer Node ein Decorator "Blackboard" hinzufügt.

    Dort gibt es nämnlich einige wenige Einstellungen, die mir nicht ganz klar sind, diese hier:



    Da gibt es einige Auswahlmöglichkeiten.

    Wer wirklich Ahnung hat, kann mir bitte jemand diese exakt erklären?

    Durch Rumprobieren kommt man bei kleinen BehaviorTrees zurecht, aber wenn die groß werden, dann muss ich schon genau wissen, was ich tue.


    Vielen Dank schonmal.

    Mein AI wird immer reifer, aber stehe jetzt auf dem Schlauch und hab kein Plan warum der nich so will, wie ich will^^.

    Ich erkläre mit Bildern




    Ich als Spieler verstecke mich hinter einer Mauer, die AI sieht mich also nicht, die "Sequence-Node" wird noch nicht ausgeführt, weil "GegnerLetzteLocation" noch nicht gesetzt ist. Soweit so gut.





    Nun komme ich aus der Mauer hervor, die AI sieht mich und "GegnerLetzteLocation" wird gefüllt mit meiner Location, die Sequence wird ausgeführt. In der Sequence läuft die AI hinter einer Deckung und die Sequence wird nach einem Durchlauf über die letzte Task blockiert, da dort "bInDeckung" auf true geschaltet wurde. Soweit so gut, alles klappt wie geplant.


    Jetzt kommt das Merkwürdige, ich habe eine andere "Sequence", die die AI einfach nur patroullieren lassen soll und diese klappt auch wunderbar für sich genommen, siehe hier:



    aber wenn ich die zusammen nacheinander verbinde, dann will die erste Deckungs-Sequence nicht mehr und macht sowas eigenartiges...


    Ich verbinde also beide Sequences, die einzeln für sich einwandfrei funktioniere, nun mit einem Selector oben drüber.

    Ich lasse mich von der AI sehen, sie war am patroullieren und hält nun an und kommt nicht mehr mit der EQS-Node richtig zurecht, siehe hier:


    Meine Überlegung ist, einzelne GridPunkte zu setzen, weiß einer wie das geht?


    Wenn ich dann ein GeländeStück entwerfe, dann platziere ich diese GridPunkte drum herum. Dann je nach Spielsituation wird die AI dort in richtigen Richtung Deckung suchen.

    Hallo, ich überlege nun die AI so schlau genug zu machen, dass sie nach Deckung sucht, sobald sie den Spieler erkannt hat.

    Nutzt ihr das EQS System dafür auch? Habt ihr damit gute Erfahrungen gemacht?


    Mir fällt sonst nur ein, selber LineTraces abzufeiern oder vllt mit Overlapspheren die Umgebung anzusuchen und vorher Deckungspunkte selber zu legen?

    Welchen Rat könnt ihr da geben?

    danke

    hab probiert, hier der Code:


    in.h


    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Camera, meta = (AllowPrivateAccess = "true"))

    UAudioComponent* GeschossSound;


    in .cpp Constructor


    GeschossSound = CreateDefaultSubobject<UAudioComponent>(TEXT("GeschossSound"));

    GeschossSound->SetupAttachment(RootComponent);


    in BeginPlay() Funktion:


    GeschossSound->Play();


    //Im Blueprint natürlich die Sounddatei auswählen.

    Wird leider garnicht erst gespielt. Warum?

    Ich habe eine Art Torpedo und dieser Torpedo soll sich natürlich während seiner Bewegung auch danach anhören.

    Ich kenne nur Funktionen, die zu Beginn an Ort und Stelle einen Sound ausgeben, ich bräuchte eine Funktion, damit dieser Sound sich auch mit diesem Torpedo mitbewegt.

    Den Torpedo bewege ich mit Hilfe des ProjectileMovementComponent.

    Danke

    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;

    }

    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.

    hat ihr eigenes AnimationBP. Bewegt sich über BehaviorTree, MoveTo Node, genau.


    Hier meine aktuelle Frage:

    angenommen der Char bewegt sich mit der Vorwärtsanimation vor, die ja im Blendspace vorhanden ist, nun erreicht die AI den Wegpunkt, bei Erreichen des Wegpunkts läuft die VorwärtsAnimation ja nicht bis zum Ende und schaltet dann zur StopAnimation, sondern hält irgendwo innerhalb der VorwärtsAnimation an und schaltet dann zur Stop Animation, das ergibt aber dann nicht immer einen fließenden Übergang.


    Weil die StopAnimation mit der Körperhaltung anfängt wie die VorwärtsAnimation aufhört. Wie löst ihr das Problem, kann man irgendwie zwischen diesen beiden blenden oder so?

    Kennt ihr das auch, euer AI läuft von Wegpunkt zu Wegpunkt, alles gut soweit, aber er bleibt so stockend abrupt am Wegpunkt stehen.


    Selbst wenn ich eine Jog_Stop Animation mit einfüge, dann sieht man trotzdem wie die LaufAnimation Endet und dann kommt der Ruckel, dann startet die EndAnimation.


    Irgendwie sieht das so extrem auch nur bei der AI aus, wenn ich den Char steuere, dann sieht schon sehr viel geschmeidiger aus?

    Weiß einer woran das liegt?

    Hallo Jungens, ich komme Schrittweise voran.

    Hier meine neue Frage, ich habe ein Array voller Actoren namens "OutActors", diese Actoren möchte ich nun sortieren nach ihrer Entfernung zu mir. Also der Actor mit der kürzesten Entfernung zu mir soll ausgegeben werde,


    Hier so mein bisheriger Code, aber irgendwas ist noch falsch:


    OutActors.Sort([](AActor& A, AActor& B) { return A.GetDistanceTo(this) < B.GetDistanceTo(this) });


    Bzw, ich sortiere auch zum ersten mal Arrays, wie sortiert man überhaupt, und wie sortiert man nach bestimmten Eigenschaften der Elemente im Array
    ?