Jump to content
Unity Insider Forum

Rotation stoppen


Jolly Roger

Recommended Posts

Huhu!

folgender Code funktioniert zwar eigentlich recht gut ... aber ich wollt mal fragen ob man das nich besser machen kann. Der Code soll Karten um 180° drehen. Ich hatte erst das Problem das die Rotation nie anhielt. Als ich

if (targetAngles.y == 360)
	targetAngles.y = 0;

und

if(MathF.Abs(targetAngles.y - transform.eulerAngles.y) < 1)
{
	transform.eulerAngles = targetAngles;
}

eingefügt hatte klappte eigentlich alles soweit ... aber besonders das mit der MathF.Abs Methode kommt mir so ... ungenau vor. Vielleicht gibs einen genaueren Weg?

Hier mal der komplette Code zum rotieren.

public void RotateCard()
    {
        targetAngles = transform.eulerAngles + 180f * Vector3.up;
        if (targetAngles.y == 360)
            targetAngles.y = 0;
        doRotate = true;
    }

private void Rotate()
    {
        if(doRotate == true)
        {
            if (targetAngles != transform.eulerAngles)
            {
                transform.Rotate(0, Time.deltaTime * 500, 0, Space.Self);

                if(MathF.Abs(targetAngles.y - transform.eulerAngles.y) < 1)
                {
                    transform.eulerAngles = targetAngles;
                }
            }
            else
            {
                doRotate = false;
            }
        }
    }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin,

da ist dein Gefühl schon richtig. Werte hardcoden und dann hoffen dass das da schon irgendwie reinrutscht ist nie eine gute Idee.

Generell empfehle ich außerdem, niemals transform.eulerAngles für das Abgleichen bei einer Rotationsbewegung auszulesen. Das geht früher oder später schief.

Vorschlag: Nimm stattdessen Quaternion.RotateTowards:

transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, speed * Time.deltaTime);

targetRotation ist ein Quaternion, das du beliebig erstellen kannst. In deinem Fall vermutlich am besten mit

targetRotation = Quaternion.Euler(0, 180, 0);

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Top, freut mich!

Quaternions stellen Rotationen dar und benutzen dafür 4 Zahlenwerte anstatt der 3, die du bei Eulerwinkeln hast. Die Mathematik dahinter ist ein bisschen komplizierter, aber zum Glück kannst (und solltest) du die Finger davon lassen. Also niemals targetRotation.x oder so anfassen, sondern immer nur die verfügbaren Methoden nutzen; wie Quaternion.Euler oder Quaternion.RotateTowards. Damit kannst du alles machen, ohne dich mit der zugrunde liegenden Mathematik auseinanderzusetzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...