In welcher Reihenfolge aktivieren sich Events?

  • Ich denk mir auch immer wieder, dass das ganze gleichzeitig abgespielt wird und dann merk ich dass dem nicht so ist, wenn ich erst nen Actor zerstöre und danach von ihm ne Variable abrufen will, hehe
    Gut, manchmal denk ich auch an was ganz anderes während ich meine BPs mache und dann frag ich mich, wieso es schon wieder einige Warnungen gibt, dass irgendwass "pending kill" ist...


    Multithreading, also Berechnungen die parallel zum Rendering laufen

    Unter Multithreading versteh ich glaub ich was anderes als du...
    Multithreading bedeutet für mich, dass alle Kerne der CPU benutzt werden und nicht so wie es ohne selbst eingebautem Multithreading ist, dass nur 1 Kern benutzt wird^^


    Hier ein Plugin, mit welchem man "echtes" Multithreading einbauen kann, habs aber noch nicht ausprobiert (versteh den Russen zu schlecht um das zu blicken und hatte bisher auch keine Lust):
    https://www.unrealengine.com/marketplace/bpthreads
    Danke nochmal an @Nobody für den Tip


    Falls sich im letzten Jahr nichts geändert hat ticken Timer im Game thread

    Das Wollte ich schon lang mal wissen, ob Timer genau so Performance-lastig sind wie Event Tick...

  • Unter Multithreading versteh ich glaub ich was anderes als du...Multithreading bedeutet für mich, dass alle Kerne der CPU benutzt werden und nicht so wie es ohne selbst eingebautem Multithreading ist, dass nur 1 Kern benutzt wird^^

    Das ist nicht was "Ich" oder "Du" darunter verstehen. Was ich geschrieben habe ist Fakt. Multithreading läuft auch auf einem CPU Kern. Auch wenn es für den Leihen unlogisch klingt.


    https://de.wikipedia.org/wiki/…reseitiges_Multithreading


    Aber da kommt sicher gleich wieder einer um die Ecke der es besser weis....... <X <X

    Tomura
    Wenn der Timer in Gamethread läuft dann läuft der pro Tick oder wie soll das gehen? Ich kann aber Sekunden nicht Ticks einstellen in dem Timer. Ich kann einen Timer auch 10 mal in einem Tick laufen lassen oder alle 1.234343 Ticks. Wie soll das ohne einen eigenen Thread funktionieren? Da brauch ich nicht in den C++ code zu gucken.

  • Softwareseitiges verbessert aber nicht die Performance, oder?
    Ist das Plugin welches ich verlinkt hab, jetzt Software- oder Hardware-seitiges Multithreading?


  • Tomura
    Wenn der Timer in Gamethread läuft dann läuft der pro Tick oder wie soll das gehen? Ich kann aber Sekunden nicht Ticks einstellen in dem Timer. Ich kann einen Timer auch 10 mal in einem Tick laufen lassen oder alle 1.234343 Ticks. Wie soll das ohne einen eigenen Thread funktionieren? Da brauch ich nicht in den C++ code zu gucken.

    Also wenn man einen Timer erstellt wird im TimerManager einfach ein Eintrag erstellt (als struct) dieser Referenziert eine Funktion als Delegate (kann man sehen wie einen Pointer zu der Speicher-Addresse der Funktion die aufgerufen werden soll, da es Bluprint kompatibel ist, ist es bisschen komplizierter gemacht, damit es sauber klappt)
    In LevelTick (LevelTick.cpp UWorld::Tick()) wird dann die Tick Funktion des TimerManagers aufgerufen. Dort werden dann Timer aktualisiert und es wird geprüft ob ein Timer abgelaufen ist und der Delegate welcher zu dem Timer eingetragen ist aufgerufen.


    Delays funktionieren analog dazu (Stichwort LatentAction, LatentActionManager).


    D.h. die Präzision eines Timers ist abhängig von der TickTime.


    BTW warum ist das so:
    Die Zugriffe bei der Gameplay programmierung lassen sich nur schwer vorhersehen. Vorallem von Epic selbst. Daher ist es auch schwer die Gameplay programmierung selbst zu parallelisieren in mehreren threads, da sonst unvorherrsehbare Dinge passieren könnten, wenn z.B. ein thread die daten manipuliert, die ein anderer thread verarbeitet. Es kann also mit höher Wahrscheinlichkeit passieren, dass mitten im Game Tick, dieser von einem anderen thread unplausibel gemacht wird. Dies soll natürlich nicht passieren.
    Multithreading für Gameplay ist aber nicht unmöglich, jedoch eine anspruchsvolle Aufgabe, die etwas Theorie erfordert.

  • Ja, du kannst ja auch ne Minute ins Delay eintragen. Das Spiel läuft einfach weiter. Wäre es nicht parallel würde das Spiel einfach stehen bleiben. Das wurde hier aber glaub ich bereits erwähnt.

    Ein Delay ist ein Platzhalter. Es läuft immer nacheinander, anderfalls benötigst du C++ Code um etwas Multicore zu machen. Sollte das mittlerweile über BP gehen, dann wäre ein Link nett. Mit anderen Worten läuft da garnichts parallel wenn es um Berechnungen und Events geht.