Reaktionsgeschwindigkeit bei unterschiedlich starken Rechnern

  • Hallo Leute,


    ich habe ein Problem mit meiner KI (Gegner). Die Reaktionsgeschwindigkeit von denen habe ich auf einen Wert von 0,25 Sekunden eingestellt. Das bedeutet, dass bei Sicht des Spielers, die Gegner nach einer Zeit von 0,25 Sekunden reagiert. Dann wird über die Node "Set Sensing Intervall" das Intervall auf 0,0001 + Delta Seconds festgelegt.


    Bei mir auf meinem Rechner funktioniert das super. Ich habe das Spiel einem Freund gegeben und für ihn war das Spiel unschaffbar. Er hat quasi einen Raum betreten und war SOFORT tot. Ich dachte, ich habe eine Lösung für das Problem gefunden, indem ich exakt in dem Moment, in dem ein Gegner den Spieler sieht die DeltaTime (Get World Delta Seconds) zu der Reaktionszeit (0,25 Sekunden) addiere. Diese Zeit läuft in ein Timer. Und siehe da, mein Kumpel konnte das Spiel meistern.


    Aber: Nun habe ich das Spiel einem weiteren Kumpel gegeben, der im Vergleich zu uns beiden einen viel schnelleren Rechner hat. Leider ist das Spiel bei Ihm wieder unspielbar geworden, was meine Vermutung bekräftigt, dass meine Lösung doch nicht die Richtige war.


    Was muss ich mit der Deltatime vor einem TImer, oder dem "Set Sensing Intervall" machen, dass die Zeit bei jedem Rechner exakt gleich ist?


    Viele Grüße

    • Offizieller Beitrag

    Im Moment berechnest du die Reaktionsgeschwindigkeit basierend auf DeltaTime und der Framerate.

    Was du tun musst, ist die Berechnung unabhängig von der Framerate durchzuführen.

    1. Tick-basierte Logik: Aktuell wird pro Frame eine Aktion durchgeführt. Je schneller die Grafikkarte, desto schneller werden die Gegner gespawnt und desto schwieriger wird es, die Gegner zu besiegen. Wenn du alle zeitabhängigen Aktionen mit DeltaTime multiplizierst, sollte die Logik unabhängig von der Framerate sein.
    2. Timer verwenden: Anstatt Gegner basierend auf einer bestimmten Anzahl an Frames zu spawnen, solltest du Timer verwenden, um Gegner zu spawnen. Timer basieren auf echter Zeit und nicht auf der Anzahl der Frames.
    3. GetWorldDeltaSeconds verwenden: Das ist die Zeit, die seit dem letzten Frame vergangen ist, und sollte in alle Berechnungen einfließen. Dadurch wird sichergestellt, dass zeitabhängige Aktionen gleichmäßig auf allen Systemen ablaufen.
  • Danke für deine schnelle Antwort Sleepy,


    aber ich habe ein mathematisches Verständnisproblem: Vorher hatte ich Reaktionszeit + Deltatime

    also bspw.: 0,25 + 0,0166667 = 0,26666667


    Wenn ich den wert aber vorher multipliziere: Reaktionszeit * deltatime + Reaktionszeit

    also bspw.: 0,25 * 0,0166667 + 0,25 = 0,2541666675


    Das Endergebnis (Also die Reaktionszeit) ist also kleiner als mein (falscher) Wert vorher. Wieso funktioniert das dann trotzdem? Hebelt die Multiplikation den Zufallsfaktor fps aus?

  • @Lalilu DeltaTime ist ein Wert der sich mit jeden auf ruf der Funktion ändern kann und spiegelt meines Wissens nach die Zeit zwischen zwei Frames wider, die verstrichen ist. Auf einen schnelleren Rechner bekommst du hier einen Kleinbrennwert als auf einen langsamen Rechner. Für Animationen die man pro Frame update ist Deltatime sehr schön um eine gleichmäßige Bewegung zu gewährleisten für KI und Reaktionsgeschwindigkeit solltest du ein Fixen Zeitschrift nehmen, daher wäre wie die Slepy vorgeschlagen

    vorgehen am sinfolsten. Probiere das ganze doch einfdach mal mit GetWorldDeltaSeconds.

    - Lernen ist wie das Rudern gegen den Strom; sobald man aufhört, treibt man zurück

    - Selbst der längste Weg beginnt mit dem ersten Schritt

    - Die Tat unterscheidet das Ziel vom Traum.

    - Habe immer mehr Träume, als die Realität zerstören kann.

    • Offizieller Beitrag

    Ich glaub du hast Sensing Intervall falsch verstanden. Das Ding triggert in Delay Time. Wenn du 0,25 sekunden einstellst, dann werden auch immer nur 0,25 Sekunden getriggert.

    Noch was: Je höher die Framerate, desto kleiner die DeltaSeconds. Ist ja auch klar. von Frame zu Frame wird die Zeit berechnet.

    Wenn ich den wert aber vorher multipliziere: Reaktionszeit * deltatime + Reaktionszeit

    also bspw.: 0,25 * 0,0166667 + 0,25 = 0,2541666675

    0,25 * 0,0166667 + 0,25 = 0,2541666675

    0,25 * 0,012 + 0,25 = 0,253 (Also, kürzer)


    Wenn die NPCs unterschiedlich schnell reagieren, je nachdem man die FPS hat, dann hat das was mit deiner weiteren code folge zu tun, die ich jetzt nicht kenne.

  • Hallo Leute, Verzeihung bitte für die verspätete Antwort. Ich habe in meinem Schaltungen auch "Set Timer by Event"-Nodes. Und da hatte ich einen festen Wert von 0,25 Sekunden drin (Die Zeit, die die Gegner benötigen, um zu reagieren, wenn sie einen Spieler sehen, bevor sie schießen).

    Habe jetzt wie von euch empfohlen die Delta Seconds Node verwendet und die dazwischen geschaltet. Seit gut 2 Wochen wird mein Spiel von Betatestern getestet, die völlig unterschiedliche Hardware haben. Und bisher ist kein Problem mehr aufgetreten Diesbezüglich :)

    Ich danke euch für die große Hilfe