2016-04-15 8 views
0

Ich versuche, eine Gruppe von Objekten um 90 Grad in Einheit zu drehen, so dass ich alle Objekte auf das gleiche Elternteil eingestellt, dann rotierte das Elternteil, es drehte sich gut aber es ist zu schnell, dass ich nicht sehen kann, wie kann ich es verlangsamen? Ich habe versucht, beide Codes unten und beide sind gleich: \ dieser Code in einer Funktion, die durch Update aufgerufen wird, wenn der Benutzer drückt auf einen KnopfRotation einer Gruppe von Objekten in Unity ist zu schnell

float totalRotation = 0; 
    while (Mathf.Abs(totalRotation) < 90){ 
     totalRotation += Time.deltaTime; 
     Parent.transform.RotateAround(temp.transform.position, flag*Vector3.right, Time.deltaTime); 
    } 

und dieses

Parent.transform.RotateAround(temp.transform.position, flag*Vector3.right, 90f); 

dank voraus!

+0

Buchungscode Fragmente ist ** völlig nutzlos **.niemand hat eine Ahnung, wo dieser Code erscheint usw. – Fattie

+0

@JoeBlow bearbeitet, hoffe, dass es jetzt klarer ist. – msLangdon95

Antwort

0

Verwenden Sie einen Faktor für den Winkel, so etwas wie

Parent.transform.RotateAround(temp.transform.position, flag*Vector3.right, Time.deltaTime * 0.5f); 

Basierend auf dem while Ich würde vermuten, dass Sie tatsächlich diese in Update nicht tun. In jedem Fall wird dies nicht funktionieren, da das Update ein Frame ist. Sie wollen nicht eine while etwas Zeit wie diese tun. Machen Sie stattdessen Ihre while eine if. Auf diese Weise wird die Rotation wahrscheinlich zu langsam sein, so dass der Faktor größer wird. Momentan ist deine Rotation sofort.

Edit:
So etwas wie dies funktionieren würde:

public bool isRotating = false; 
public float speed = 20.0f; 

public Vector3 targetRotation; 

void Update() 
{ 
    if(isRotating) 
    { 
     if(Vector3.Distance(transform.eulerAngles, targetRotation) > 1.0f) 
     { 
      transform.Rotate(Vector3.up * Time.deltaTime * speed); 
     } 
     else 
     { 
      transform.eulerAngles = targetRotation; 
      isRotating = false; 
     } 
    } 
} 

Dies würde nur etwa y sein.

+0

Sie sind absolut richtig, ich drehte es in eine wenn und machte den Faktor größer, ich will es nur um 90 Grad drehen und versuchte viele Faktoren und keiner von ihnen scheint richtig: \ – msLangdon95

+0

Edited ein Beispiel dafür, wie Sie die Rotation einklemmen könnten . –

0

Dieser Teil der Antwort funktioniert nicht. Bitte beachten Sie das Update

Eigentlich haben Sie es falsch gemacht. Bewegungen in Unity sollten langsam und nicht nur einmal durch Updates durchgeführt werden. Wie ChristophKn empfehle ich die Verwendung von Coroutine.

const float speed = 180; 
IEnumerator Rotate() { 
    float rotated = 0; 
    while (rotated < 90) { 
     float rotation = speed*Time.fixedDeltaTime; 
     rotated += rotation; 
     Parent.transform.RotateAround(temp.transform.position, flag*Vector3.right, rotation); 
     //wait for the next fixed update to continue. 
     yield return new WaitForFixedUpdate(); 
    } 
} 

zu starten, rufen rotierenden StartCoroutine(Rotate);

EDIT

Ich habe eine andere Idee, dies zu tun, nicht Skript aber Animation mit:

  • Fügen Sie zunächst ein rotierendes Animation zu Ihren Eltern-Objekten, die den gewünschten Winkel drehen.

  • Um die Objektgruppe zu drehen, legen Sie sie wie in Ihrer Frage auf das übergeordnete Element fest und starten Sie die Animation.

  • Am Ende der Animation (Sie können Ihre Methoden an diesem Punkt mit animation events aufrufen), rufen Sie SetParent(null,true) für alle Ihre Objekte in der Gruppe. Dies wird die Eltern entfernen, aber die Weltposition behalten.

  • Schließlich legen Sie die Rotation Ihrer Eltern auf den ursprünglichen Wert.

Hoffe, das wird helfen.

+0

Danke für die Antwort, ich versuchte es und es drehte sich überhaupt nicht :(! – msLangdon95

+0

es ging nicht einmal in die While-Schleife, ich fügte eine Print-Anweisung vor und in der Schleife, es erreichte nicht die darin – msLangdon95

+0

Ok ok, ich reparierte es, nur ein größeres Zeichen. – DRKblade

Verwandte Themen