Tamzo Posted October 19 Report Share Posted October 19 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 Quote Link to comment Share on other sites More sharing options...
malzbie Posted October 20 Report Share Posted October 20 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. Quote Link to comment Share on other sites More sharing options...
Tamzo Posted October 20 Author Report Share Posted October 20 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! 😊 Quote Link to comment Share on other sites More sharing options...
malzbie Posted October 20 Report Share Posted October 20 Gerne. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.