Geschoss Streuung, irgendwas verstehe ich noch nicht...

  • 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);

  • Es ist doch logisch - ein Ortsvektor bezieht sich immer auf 0,0,0 als Ursprung - ein Richtungsvektor stellt die Richtung dar, also nicht von 0,0,0 ausgehend sondern von deinem Objekt zu einem Punkt der in der Richtung liegt die gewollt ist. Du willst doch dass der Cone in die Richtung geht in die die Kugel fliegen soll, also vom Lauf (Mitte) zum Ausgang des Laufes.

  • jo versteh ich, aber in Visual Studio, wenn ich die Funktion entdecke und da steht im Tooltipp eig immer was ich einsetzen muss, damit sie funktioniert. Konnte noch nicht entschlüsseln, wann dort generell Ortvektoren gemeint sind und wann Richtungsvektoren. Sieht man das irgendwo?

    • Hilfreich

    Wie kyodai sagt, ergibt sich das aus der Logik (ich will einen Kegel, von daher benötige ich ja die Richtung des Kegels und den Winkel) und aus den Variablen Namen.

    Zu C++ in UE4:

    Epic hat bei C++ die Philosophie, dass Code der keine Kommentare braucht, auch keine Kommentare bekommt. Das hält natürlich den Dokumentationsaufwand auf niedrigen Niveau und sorgt für einen konsistenten Programmierstil.


    Es hilft nicht direkt, aber du kannst dir mal den Coding Standard anschauen.

    https://docs.unrealengine.com/…mentSetup/CodingStandard/


    Hier mal ein Beispiel für Code der sich selber Dokumentiert. Da Epic so programmiert, genügt es oft, wenn man einfach in die Definition der Funktion reinschaut. Natürlich gegeben, dass man z.B. die Mathematik versteht, bei Mathematik Funktionen.

    Code
    // Bad:
    t = s + l - b;
    
    // Good:
    TotalLeaves = SmallLeaves + LargeLeaves - SmallAndLargeLeaves;