Projektil zur Mitte hinbekommen.

  • So, in Blueprints hab ich die Lösung hinbekommen, siehe Foto. Das bräuchte ich jetzt in C++. Traut sich das einer von euch zu, sieht eig nicht so schwer aus?

    Ich habe probiert mit "BP auf "File"-->"Developer"-->"generate Native Code", aber das sieht sowas von unübersichtlich aus, keine Chance, das zu verstehen.


  • Achtung nur Pseudo-Code:


    C
    void LinksKlick()
    {
        FVector StartVector = Camera->GetWorldLocation();
        FVector EndVector = Camera->Get...Vector()...; //solltest du selber hinkriegen
        FHitResult Result;
        bool bIsBlocking = GetWorld()->LineTraceSingleByChannel(Result, StartVector, EndVector, ...);
        FVector Location = ...;
        FVector Rotation = ...;
        GetWorld()->SpawnActor<AKugel>(AKugel::StaticClass(), Location, Rotation);
    }


    LineTrace: https://docs.unrealengine.com/…ingleByChannel/index.html


    SpawnActor: https://docs.unrealengine.com/…d/SpawnActor/7/index.html


    GetSocketLocation: https://docs.unrealengine.com/…SocketLocation/index.html


    EDIT:

    Hier noch Infos zum FHitResultStruct: https://docs.unrealengine.com/…ine/FHitResult/index.html


    EDIT2:

    Und noch LookAtRotation: https://docs.unrealengine.com/…LookAtRotation/index.html

  • freezernick vielen Dank, ich habs geschafft, top.


    @kyodai auf lange Sicht will ich C++ in Unreal beherrschen, desegen mach ich alles in C++.

    Ich muss sogar sagen, im Nachhinein bereue ich es 3 Jahre mit Blueprints verschwendet zu haben.

    C++ ist wirklich ne richtige Sprache.

    Ich würde zurück fragen: Was bringt es dir mit Blueprints halbe Spiele mit halber Performance erstellen zu können, letztlich wird man es nie zu einem optimalen Spiel reichen. Dann doch lieber von Beginn an jeder freie Minute in die richtige Sprache investieren. Dort ist dann wirklich nahezu Alles möglich.


    Vllt gehts dir genau so, ich habe mich auch sehr schwer getan zu wechseln, aber ich muss dir sagen, mittlerweile bin ich mit C++ viel lieber unterwegs als in Blueprints.

  • Wenn einer meint, dass er mit C++ bessere Spiele entwickelt als andere mit Blueprints, dann sollte er es gleich bleiben lassen...

    Jeder hat seine Vorlieben. Sicherlich gibt es Dinge die mit C++ einfach mehr Sinn machen, anders wiederum für Blueprints.

    Was Performance oder allgemein der Workflow angeht kann ich natürlich nichts sagen, aber jeder sollte so arbeiten können/sollen wie er es möchte^^

    C++ ist letztlich die große Sprache der Sprachen:)

  • C++ ist letztlich die große Sprache der Sprachen:)

    Und dann am besten noch nicht mal englisch können^^



    Eigentlich gings mir ja nur um seine Aussage, dass er mit C++ bessere Spiele entwickelt, was leider nicht stimmt, seine Kreativität wird immer noch gleich sein wie zuvor, wenn die Spieler was spielen wollen ist es denen ziemlich egal, ob mit C++ oder Blueprints entwickelt.


    Und dass die Performance mit Blueprints schlechter ist, als mit C++ stimmt auch nicht, außer man setzt sich natürlich nicht mit der Engine auseinander...



    Hier mal Beispiele von Spielen die mit Blueprints entwickelt wurden:

    Conan Exiles

    Robo Recall

    Subsistence

    Golf It!

    Dead by Daylight


    Es gibt noch zig andere Beispiele^^


    Hier was zum lesen:

    https://gamedev.stackexchange.…e-blueprints-at-all-or-do

    Ja, das war Absicht, dass ich nach einer englischen Seite gesucht hab^^


    Hoffentlich sind wir dann die Diskussion endlich los, dass Blueprints Scheisse sind und man nur gute Spiele entwickeln kann, wenn man C++ beherrscht...



  • Sorry wenn ich dir mit der Frage zu nahe getreten bin. Ich wollte dich nicht verletzen oder herausfordern. Erstmal finde ich es sehr gut daß du C++ vertiefst. Wissen ist ein Schatz den dir keiner mehr nehmen kann. Man kann sich nur weiterentwickeln, dazulernen und Wissen aufbauen, von daher sind alle Erfahrungen die du machst sehr wertvoll, die kann dir keiner mehr nehmen. Ich finde es auch toll wie du kämpfst und die auch Hilfe suchst - das hilft dir die Kenntnisse zu vertiefen und dein Niveau schnell anzuheben. Es gibt viele die sich als Einzelkämpfer mit Büchern und Tutorials versuchen durchzuschlagen, aber man entwickelt sich schneller weiter wenn man mit anderen spricht. Also Kudos für deinen eisernen Willen.


    Letztlich ist es eigentlich egal ob du in C++, Fortran oder Pascal programmierst - oder eben mit Blueprints. Die meiste Arbeit eines Programmierers ist es nicht Routinen auswendig zu können sondern abstrakte Probleme abzubilden und die Lösung zu debuggen. Das ist in keiner Sprache anders und ich glaube auch du verbringst viel Zeit damit. Das ist das eigentliche A und O - die Erfahrung.


    C++ ist eine "richtige" Sprache - auf einer Oldschool Ebene. C++ ist effizient auf einer Maschinennahen Umgebung. Nicht so effizient wie Assembler und noch weniger als Maschinensprache. Mein Vater hat Maschinensprache auf 8086 Prozessoren beherrscht und ich habe ihn dafür vergöttert. Das ist eine Leistung - fast wie unter Bergsteigern wenn jemand den Mount Everest ohne Sauerstofftanks bestiegen hat. Aber wie ich sehr viel später realisiert habe - eine tolle Leistung, aber der Nutzen hat proportional mit der Entwicklung der Prozessoren abgenommen. Mit einem 386 und dem erweiterten Befehlssatz war der 8086 Code schnell abgeschlagen. Dann mit den Mathematischen Coprozessor. Wir könnten jetzt den Bogen spannen über alle Prozessorarchitekturen bis zum core i9 mit 64 bit. Aber ja es ist nicht mehr interessant. Mit einem 8086er könnte mein dad eine Anwendung schreiben um Pi auf 100 Stellen zu berechnen und es wäre sicherlich immer schneller als alles was du schreiben kannst.


    Die Sache ist daß wir heute weder 8086 Prozessoren nutzen noch die Kreiszahl pi berechnen wollen. Uns ist es egal ob jemand einen Core i9 oder einen Ryzen verwendet. Es ist dir egal welche Grafikkarte oder welche Soundkarte jemand verwendet, es ist dir eagl welche Maus der Endbenutzer hat. Das ist das Geheimnis der Abstraktion. Die Wurzeln von C++ sind über 40 Jahre alt, das erste Release war vor knapp 35 Jahren. C++ hat den Vorteil daß es über die Jahre durch viele Abstraktionsschichten mitgetragen wurde - in WIndows siehst du die bei einem nativen Projekt wie der UE4 source in den Headern - die absurde Ausmasse angenommen haben im vergleich zu einfachen Code Beispielen aus den 80ern. Das hat den Charme daß du dich nicht mit Soundkarten, Maustreibern oder ähnlichem rumschlagen musst, aber es ist nicht mehr so maschinenah wie ein auf 8086er optimierter sparsamer Code aus der Mite der 80er der die Kreiszahl pi auf 100 Stellen berechnet hat.


    Das ganz grosse Problem mit UE4 ist daß du so viele Bibliotheken und Header mit dir rumschleppst daß du selbst mit einem perfekten Code der die kreiszahl Pi auf 100 Stellen berechnet langsamer wärst als jemand der von Scratch ein ganz kleines C++ Programm dafür schreibt. Der grund ist daß UE4 eine 3D Engine ist mit unglaublich vielen Abstraktionen - selbst wenn du viele Zöpfe wie VR Unterstützung, Audio Capture, Google Cloud messaging etc rauskickst - du wirst enorm an Performance verlieren gegenüber einem C++ Programm das aus 20 Zeilen Code besteht.


    Das ist aber auch nicht der Sinn von UE4 - also die Kreiszahl pi zu berechnen - es ist eher eine 3D Spiele Engine. Und da liegt auch das Problem mit der Performance.


    ich habe damals in den USA an einem project mitgearbeitet wo wir einen begnadeten C++ Programmierer hatten. Damals noch mit einer ganz frühen UE4 version. Der war auch überzeugt daß der Code mit Blueprints alles Schrott ist und daß nativizing Blueprints (also kompilieren als c++) nur Schrott ist. Der hatte einen ganzen Monat und hat Teile der UE4 source umgeschrieben, tausende Zeilen an Code optimiert, plugins rausgeschmissen usw. Am Ende hatten wir am Referenzrechner statt 78,4 fps ganze 79,2 fps. Also 0,8 fps mehr mit 1 Monat wirklich harter Arbeit. Er hat trotzdem einen Bonus bekommen weil die Download Size des ganzen Spiels etwa 20% kleiner war und es tatsächlich besser war. Aber Performance ist relativ - eine 3D engine zieht fast nur GPU - und mit sehr cleverem C++ kannst du eigentlich nur CPU optimieren. Weil die ganze GPU Last abstrahiert ist.



    Und man muss fairerweise dazu sagen daß die ganze C++ nativization wirklich besser geworden ist.


    Um eine lange Rede kurz zu machen - Blueprint ist keine Zeitverschwendung. Wie ich eingangs gesagt habe - Programmieren ist nicht nur Lösungen finden sondern auch debuggen. Und da haben Blueprints leider eklatante Vorteile.


    C++ ist schon fast eine Kunst - aber im Vergleich zu Blueprints bringt es dir in der "vanilla" UE4 mehr Nachteile als Vorteile. Wenn du jemand bist der die Source der UE4 runterlädt und sie bis zum abwinken auf dein Spiel optimierst dann bekommst du sicher ein paar fps mehr raus. Aber wenn du nur etwas C++ in die "vanilla" UE4 reinkippst wirst du vom performance Gewinn enttäuscht sein. Erst recht wenn du auf einem Niveau bist wo du den "native code" eines Blueprints "unübersichtlich" findest.