2017-06-30 3 views
0

Ich habe einen Würfel auf (0,2,0) und ich möchte es auf der Y-Achse von 2 bis 1 und dann bis zu 3 zurück zu 1 zurück zu 3 und so weiter bewegen. ..Einheit oszillieren zwischen zwei Koordinaten

Kann mir jemand erklären, was bei der Verwendung von Mathf.PingPong() als Parameter übergeben werden?

Ich habe

public virtual void PingPongCollectable(Transform transform, float speed) 
{ 
    Vector3 pos = transform.position; // current position 
    pos.y = Mathf.PingPong(? , ?); // missing parameters, calculate new position on y 
    transform.position = pos; // new position 
} 

so wo habe ich in der Geschwindigkeit passieren und den Koordinaten A (oben) und B (unten)?

Der Würfel sollte nur sanft in einer Schleife auf- und abgleiten.

Danke!

Antwort

0

Die Unterschrift des Mathf.PingPong Methode ist die folgende:

public static float PingPong(float t, float length); 

PingPongs der Wert t, so dass es nie größer als die Länge ist und niemals kleiner als 0 ist
Der zurück Der Wert bewegt sich zwischen 0 und der Länge hin und her.

Der erste Parameter sollte Time.time sein, wenn Sie einen reibungslosen Übergang wünschen.
Der zweite Parameter ist der Maximalwert. Die Methode gibt Ihnen dann eine Position zwischen 0 und diesem Maximalwert.
Sie können dann eine untere Etage und eine Länge für die Ping-Pong-Methode festlegen.

Hier ist ein Beispiel den Code mit Ihnen zur Verfügung gestellten:

public virtual void PingPongCollectable(Transform transform, float speed) 
{ 
    Vector3 pos = transform.position; 
    float length = 1.0f; // Desired length of the ping-pong 
    float bottomFloor = 1.5f; // The low position of the ping-pong 
    pos.y = Mathf.PingPong(Time.time, length) + bottomFloor; 
    transform.position = pos; // new position 
} 

Quelle: https://docs.unity3d.com/ScriptReference/Mathf.PingPong.html

+0

mit 'Mathf.PingPong (Time.deltaTime, Länge - bottomFloor) + bottomFloor' ist nicht korrekt. Der Würfel springt sofort auf 0 und bewegt sich zu 3 und zurück zu 0. aber er sollte sich von 1.5f zu 2.5f bewegen. – Question3r

+0

Ich habe mein Beispiel bearbeitet. Wenn Sie zwischen 1.5f und 2.5f wechseln möchten, können Sie dies tun: 'Mathf.PingPong (Time.deltaTime, 1.0f) + 1.5f' – CBinet

+0

Sie müssen' Time.time' wie im Beispiel in der Docs, oder akkumulieren Sie die Zeit in einer Member-Variable. 'Time.deltaTime' wird im Allgemeinen nicht mit der Zeit zunehmen, so dass Sie dieselbe Position Frame für Frame erhalten. – BMac

Verwandte Themen