Jump to content
Unity Insider Forum

Movementspeed im Editor und Build Version unterscheidet sich Stark


Jolly Roger

Recommended Posts

Moin moin!

ich habe gerade festgestellt das sich mein Player im Build wesentlich schneller bewegt. Im Editor ist er relativ langsam und in der Buildversion ist er ruckzuck weg von Screen ^^

Woran könnte das liegen? Am Code Wahrscheinlich nicht oda?

private void FixedUpdate()
{
    rigid.velocity = moveValue;
}

public void OnMove(InputAction.CallbackContext context)
{
	moveValue = context.ReadValue<Vector2>() * speed * Time.deltaTime;
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Geht zwar, aber nein - Einfach gar nichts nehmen. Du hast hier eine Geschwindigkeit, die du setzt. Diese Geschwindigkeit brauchst du nicht mit irgendeinem DeltaTime-Wert zu multiplizieren. Dass es jetzt in Build und Editor gleich ist, liegt daran, dass fixedDeltaTime (quasi) eine Konstante ist. Es ergibt aber keinen Sinn, sie draufzumultiplizieren.

Einfach

moveValue = context.ReadValue<Vector2>() * speed;

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

achso ok .. man sieht im Netzt oft das die das mit der deltaTime multiplizieren, bzw. mit der fixedDeltaTime ... je nach Update Methode.

War eigentlich auch immer etwas skeptisch weil die FixedUpdate ja Framerate unabhängig sein soll, habs dann aber doch einfach so nachgemacht. Aber gut dann lassen wa das einfach weg, danke!

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 3 Minuten schrieb Jolly Roger:

achso ok .. man sieht im Netzt oft das die das mit der deltaTime multiplizieren, bzw. mit der fixedDeltaTime ... je nach Update Methode.

Ja, aber es ist wichtig, was man warum macht. Die Multiplikation machst du, wenn du jeden Frame ein bisschen irgendwo draufrechnest, z.B. die Geschwindigkeit auf die Position addierst. "* deltaTime" kannst du als "pro Sekunde" lesen. Wenn du also sagst

private void Update()
{
  position += x;
}

dann heißt das "Ich bewege mich mit x pro Frame", aber

private void Update()
{
  position += x * Time.deltaTime;
}

heißt "Ich bewege mich mit x pro Sekunde".

Wenn du aber velocity, also die Geschwindigkeit setzt, dann ist das schon "pro Sekunde". Weil dein Rigidbody jedes FixedUpdate die velocity nimmt, Time.fixedDeltaTime draufmultipliziert und das Ergebnis auf die Position des Rigidbodys rechnet.

Wenn du also die Velocity setzt und deltaTime draufmultiplizierst, dann machst du "pro Sekunde pro Sekunde", also "pro Sekunde zum Quadrat" und wenn du in Physik aufgepasst hast: Das ist eine Beschleunigung :)

So als Tipp: fixedDeltaTime braucht man tatsächlich nie. Es ist nur dann überhaupt sinnvoll, wenn man es in FixedUpdate benutzt, und da kannst du auch Time.deltaTime benutzen, weil es innerhalb vom FixedUpdate-Kontext immer denselben Wert zurückgibt wie fixedDeltaTime.

vor 9 Minuten schrieb Jolly Roger:

War eigentlich auch immer etwas skeptisch weil die FixedUpdate ja Framerate unabhängig sein soll, habs dann aber doch einfach so nachgemacht. Aber gut dann lassen wa das einfach weg, danke!

Ja, es ist quasi framerate-unabhängig. Nicht im Echtzeit-Sinne, aber man kann es so benutzen. Hier hast du was zum Lesen, wenn du magst: http://blog.13pixels.de/2019/what-exactly-is-fixedupdate/

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...