Jump to content
Unity Insider Forum

Rotation stoppen


Jolly Roger
 Share

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 to comment
Share on other sites

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 to comment
Share on other sites

Super! Jetzt funktionierts einwandfrei! Und sieht auch noch sauberer aus =D

Ich hatte mich ursprünglich für eulerAngeles entschieden da ich mit den Wort was anfangen konnte ... im Gegensatz zu Quaternion ^^

Aber so is es jetzt viel besser, ich Bedanke mich!

Link to comment
Share on other sites

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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...