2014-11-30 14 views
5

Ich habe ein Auto-Objekt in meiner Szene. Ich würde gerne eine einfache Fahranimation simulieren, indem ich sie langsam in eine neue Position bringe ... Ich habe den Code unten verwendet, aber ich glaube, ich benutze Lerp falsch? Es springt nur ein bisschen vorwärts und stoppt?Langsames Bewegen eines Objekts an eine neue Position in Unity C#

void PlayIntro() { 
    GameObject Car = carObject; 
    Vector3 oldCarPos = new Vector3(Car.transform.position.x, Car.transform.position.y, Car.transform.position.z); 
    GameObject posFinder = GameObject.Find("newCarPos"); 

    Vector3 newCarPos = new Vector3(posFinder.transform.position.x, posFinder.transform.position.y, posFinder.transform.position.z); 

    carObject.transform.position = Vector3.Lerp (oldCarPos, newCarPos, Time.deltaTime * 2.0f); 
} 

Antwort

8

ist es zwei Probleme mit Ihrem Code:

  • Vector3.Lerp einen einzelnen Wert zurückgibt. Da Ihre Funktion nur einmal aufgerufen wird, stellen Sie einfach die Position auf Lerp zurück. Sie werden stattdessen die Position jedes Frames ändern wollen. Verwenden Sie dazu coroutines.

  • Time.DeltaTime gibt die Zeit zurück, die seit dem letzten Frame verstrichen ist, was im Allgemeinen eine sehr kleine Zahl ist. Je nach Fortschritt der Bewegung werden Sie eine Zahl von 0.0 bis 1.0 eingeben.

Ihr Code wird dann wie folgt aussehen:

IEnumerator MoveFunction() 
{ 
    float timeSinceStarted = 0f; 
    while (true) 
    { 
     timeSinceStarted += Time.DeltaTime; 
     obj.transform.position = Vector3.Lerp(obj.transform.position, newPosition, timeSinceStarted); 

     // If the object has arrived, stop the coroutine 
     if (obj.transform.position == newPosition) 
     { 
      yield break; 
     } 

     // Otherwise, continue next frame 
     yield return null; 
    } 
} 
0

Eine einfache Lösung ist unmittelbar nach der Lerp Funktion der Position des Objekts in die gewünschten Position tatsächlich eingestellt

hier ist, wie es aussehen soll

carObject.transform.position = Vector3.Lerp (oldCarPos, newCarPos, Time.deltaTime * 2.0f); 
carObject.transform.position = newCarPos; 
+0

Hallo @Matt, der Code funktioniert gut, aber auf diese Weise bewegt sich das Spielobjekt zu schnell, Wissen Sie Wie kann ich die Bewegung langsam machen? Ich habe bereits versucht, den Wert 2.0f von (Time.deltaTime * 2.0f) zu ändern. Danke im Voraus –