2016-11-16 3 views
0

So mache ich eine einfache 2d endlosen mobilen Spiel. In dem Spiel bewegt sich das Spielerobjekt (Raumschiff) kontinuierlich aufwärts und dann kann der Spieler entweder links oder rechts den Spieler bewegen, um Hindernissen auszuweichen.effizienteste Weg, um eine sehr glatte Spieler Bewegung in Unity5

Als Neuling finde ich es sehr schwierig, eine sehr glatte Bewegung in der Spielerbewegung zu erreichen. Ich habe mir viele Tutorials angeschaut, einschließlich der offiziellen Tutorials über das Bewegen eines Objekts. Sie alle nutzen einfache Techniken wie:

rigidbody.velocity = (new Vector2 (0.0f, 1.0f)) * speed in der fixedupdate Funktion

oder transform.Translate (velocity * Time.deltaTime * speed) in der Update-Funktion

oder rigidBody.MovePosition (rigidbody.position + velocity * Time.fixedDeltaTime) im Fest Update oder

nur die Änderung nur die transform.position im Laufe der Zeit in der Update-Funktion.

Aber keine dieser Techniken oder Code, den ich verwendet habe, hat mir geholfen, diese sehr glatte Bewegung in der Spielerbewegung zu erreichen, die ich will. Egal was ich versuche, ich bekomme immer noch Verzögerungen in der Spielerbewegung. Ich habe auch versucht, die rigidbody.iskinematic auf und von und die Starrkörper-Interpolation zu ändern, aber ich bin immer noch nicht in der Lage, eine glatte Bewegung in 2d Spiele zu erreichen, die wir wie ios games shredd or split the dot sehen. Ich dachte, dass es mein Computer wäre, der sehr langsam ist oder etwas, weshalb ich keine sanfte Bewegung bekomme, aber ich transportierte mein Projekt auf meinen Computer, der doppelt so schnell ist und ich habe immer noch die gleichen Ergebnisse. Ich streifte auch alles, was sich dazu entschieden hat, den gesamten Code, der in den Player-Controller-Skripten ist, zu löschen und mich nur auf den Code zum Verschieben des Players zu konzentrieren, aber die Ergebnisse haben sich nicht geändert.

Ich denke, dass es ist, weil ich nur einen sehr einfachen und ineffizienten Code verwende, um den Player zu bewegen, oder es könnte etwas mit dem Ändern einiger Einstellungen in Einheit zu tun haben. Die Frage ist also, welcher der effizienteste Weg ist, um eine sehr glatte Spielerbewegung in Einheit zu erreichen. (Codebase und Einheitseinstellungen.)

Momentan benutze ich nur rigidbody.velocity = (new Vector2 (0.0f, 1.0f)) * speed, um den Spieler zu bewegen, und ich habe die Kamera ein Kindobjekt des Spielers für die Einfachheit gemacht.

Vielen Dank.

+0

Haben Sie versucht, übersetzen mit vector2 'transform.Translate (neue Vector2 (0, 1) * moveSpeed ​​* Time.deltaTime);'. Ich habe empfohlen, die fps auf deiner GUI anzuzeigen, damit du weißt, ob dein gesamtes Spiel nachläuft oder ob es nur dein Player ist. Wenn Ihr gesamtes Spiel nachlässt, dann gibt es ein Profiling dort zu machen ... –

+0

BTW, da dieser Code 'Time.deltaTime' verwendet, sollte es innerhalb der' Update' Methode sein. –

+0

Wo ist dein Code, praktisch, um das aufzustellen, was du hast, das nicht glatte Resultate gibt. Es könnte mit der Größe Ihres Objekts tun und die Menge ist weniger als die Menge, die Sie im Laufe der Zeit bewegen. Bewegt sich Ihre Kamera mit dem Objekt? –

Antwort

0

Ich würde Vector3.Lerp verwenden, um die transform.position zu interpolieren. Dies glättet im Wesentlichen mathematisch die Translation zwischen den beiden Positionen.

Noch etwas, das ich erlebt habe, ist, dass der Editor manchmal lückiger als das Endprodukt ist, also empfange ich den Aufbau des Spiels und teste es aus, um zu sehen, ob das der Fall ist.

Schließlich, wenn Sie transform.position verwenden, um das Objekt zu verschieben, stellen Sie sicher, dass die Zahlen ziemlich klein sind. Bif-Zahlen lassen das Objekt offensichtlich viel mehr herumspringen.

Verwandte Themen