Jolly Roger Posted August 5 Report Share Posted August 5 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; } } } Quote Link to comment Share on other sites More sharing options...
Jolly Roger Posted August 5 Author Report Share Posted August 5 Bei der MathF abfrage hab ich jetzt von < 1 auf < 6 erhöht .... da es doch häufiger vorkam das er noch eine Ehrenrunde rotiert hat ^^ gefällt mir nich so ganz 😕 Quote Link to comment Share on other sites More sharing options...
Sascha Posted August 5 Report Share Posted August 5 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); Quote Link to comment Share on other sites More sharing options...
Jolly Roger Posted August 6 Author Report Share Posted August 6 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! Quote Link to comment Share on other sites More sharing options...
Sascha Posted August 6 Report Share Posted August 6 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.