Jump to content
Unity Insider Forum

gameObject bewegt sich im Editor viel schneller als im Build


Tamzo
 Share

Recommended Posts

Hallo, vielleicht kann mir jemand helfen. Ich bin ganz neu dabei, folge einer Anleitung aus einem Buch

Ein Spielobject soll sich von rechts nach links und zurück bewegen. Im Build bewegt sich das Objekt schön langsam, so wie gewollt, aber im Editor rasend schnell.

Was ist hier los? Ich verzweifle. Hier der code aus dem Script des Objekts.

 

public class Gefahren : MonoBehaviour
{
    float xStart;
    float xAenderung;
    

    void Start()
    {
        xStart = transform.position.x;
        xAenderung = (Random.Range(0.4f, 0.8f)) * Time.deltaTime;
    }

    void Update()
    {
        float xNeu = transform.position.x + xAenderung;
        transform.position = new Vector3(xNeu, transform.position.y, 0);

        if ((xNeu > xStart + 2) || (xNeu < xStart - 2))
        {
            xAenderung = -1 * xAenderung;
        }
    }
}

EDIT: Es läuft nur so schnell wenn ich im Editor "Play Maximized" nutze

Link to comment
Share on other sites

Hi!
Die Time.deltaTime gibt die einen Zeitwert zurück, der zwischen 2 Frames vergangen ist. Also nachdem alles Mögliche berechnet wurde und dann alles schön dargestellt wurde.
Das wird dazu genutzt um alles schön gleichmäßig zu bekommen. Egal, wie schnell der Rechner ist und egal was der Rechner noch so tut.
Damit das funktioniert muss die deltaTime natürlich in jedem Updatezyklus auch ermittelt bzw. genutzt werden und nicht nur einmalig beim Start.

Da du deine zufällige xAenderung beim Start einmalig mit der deltaTime multiplizierst, ist dieser Wert dann in der Update eine Konstante.
Startest du das Game und hast in Unity mehrere Ansichten auf, dann muss unity ganz viele Dinge doppelt machen und das verlangsamt das System.
Im Vollbildmodus braucht es ganz viele Dinge nicht tun und dadurch wird es schneller. Deswegen hast du bei den unterschiedlichen Ansichten auch unterschiedliche Geschwindigkeiten, weil die ermittelte Zufallszahl unterschiedlich groß ist, denn die deltaTime ist je nach Modus unterschiedlich groß.
Je schneller ein Frame abgearbeitet wird umso kleiner ist die deltaTime und umgekehrt.

Du musst also die deltaTime aus der Start raus nehmen und dafür in der Update nutzen.
In der Start schreibst du :

xAenderung = (Random.Range(0.4f, 0.8f)) ; // hier nimmst du die deltaTime weg

und in der Update:

float xNeu = transform.position.x + xAenderung * Time.deltaTime; // hier fügst du sie an, damit xNeu immer auf die Framerate angepasst wird.

Jetzt sollte die Bewegung immer gleich sein, egal ob Vollbild oder nicht.
Wenn es jetzt insgesamt zu schnell oder zu langsam ist, musst du noch die Werte anpassen oder einfach mit einem weiteren Wert multiplizieren.

Time.deltaTime kannst du gleichsetzen mit pro Sekunde. deine Position auf der x Achse wird also um xAenderung pro Sekunde verschoben.
Vielleicht hilft das. :)

 

Link to comment
Share on other sites

Hi malzbie,

vielen Dank, das du dir die Zeit genommen hast mir die Lösung so ausführlich und verständlich zu erklären.

Es hat alles genau so funktioniert wie du gesagt hast, und ich habe verstanden warum.

Vielen dank dafür! 😊

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...