2016-05-16 9 views
0

Als Bild dargestellt, meine Kamera auf dem Weg zu bewegen Ich möchte das andere Objekt reibungslos aussehen. Derzeit habe ich versuchtSmoothly LookAt anderen Objekt

trasnform.LooAt(activePath.gameObject.transform); 

aber es produziert ruckartige Ergebnis. Objekt sieht plötzlich mit dem nächsten Objekt mit Ruck! wie man es vermeidet. Ich suchte und diese Lösung gefunden, aber es auch nicht funktioniert

var targetRotation = Quaternion.LookRotation(activePath.gameObject.transform.position - transform.position); 
     transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime); 

enter image description here

Antwort

0

void SmoothLookAt(Vector3 newDirection){ transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(newDirection), Time.deltaTime); }

Pass in der Vector3 Position des neuen Blick auf Ziel auf diese Methode und es aussehen wird glatt auf das Ziel .

z.B. SmoothLookAt(activePath.gameObject.transform)

+0

es ist nicht statt kontinuierlich –

+0

Try Rucken übersetzt arbeiten Hinzufügen einer Multiplizieren Sie mit 'Time.deltaTime', um die Bewegung zu verlangsamen, um Ihren i ssue. Ich befürchte, dass es andere Skripte gibt, die ein Problem verursachen. Möglicherweise müssen Sie mehr von einem Beispiel Ihres Skripts posten – Harvey

+0

tatsächlich verwende ich MegaShape-Paket, das spl-Format Spline dann bekomme ich meine Kamera auf diese Spline eine nach der anderen. für mehr http://stackoverflow.com/questions/37249480/rotation-toward-the-movement-direction-of-object –

0

Hier ist eine Möglichkeit, eine reibungslose Übersetzung zu machen. Die Parameter sind

  • Objekt zu verwandeln,
  • Endlagenstabilität und
  • LookAt verwandeln


private const float ANIMATION_DURATION_IN_SECONDS = 5f; 

private IEnumerator SmoothTranslation(Transform startTransform, Vector3 finalPosition, Transform lookAtTransform){ 
     float currentDelta = 0; 

     // Store initial values, because startTransform is passed by reference 
     var startPosition = startTransform.position; 
     var startRotation = startTransform.rotation; 

     while (currentDelta <= 1f) { 
      currentDelta += Time.deltaTime/ANIMATION_DURATION_IN_SECONDS; 

      transform.position = Vector3.Lerp(startPosition, finalPosition, currentDelta); 

      if (lookAtTransform != null) { 
       // HACK Trick: 
       // We want to rotate the camera transform at 'lookAtTransform', so we do that. 
       // On every frame we rotate the camera to that direction. And to have a smooth effect we use lerp. 
       // The trick is even when we know where to rotate the camera, we are going to override the rotation 
       // change caused by `transform.lookAt` with the rotation given by the lerp operation. 
       transform.LookAt(lookAtTransform); 
       transform.rotation = Quaternion.Lerp(startRotation, transform.rotation, currentDelta); 
      } 
      else { 
       Debug.LogWarning("CameraZoomInOut: There is no rotation data defined!"); 
       transform.rotation = originalCameraRotation; 
      } 

      yield return null; 
     } 

    } 
Verwandte Themen