Jolly Roger Geschrieben 5. August 2022 Melden Share Geschrieben 5. August 2022 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 More sharing options...
Jolly Roger Geschrieben 5. August 2022 Autor Melden Share Geschrieben 5. August 2022 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 😕 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 5. August 2022 Melden Share Geschrieben 5. August 2022 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 More sharing options...
Jolly Roger Geschrieben 6. August 2022 Autor Melden Share Geschrieben 6. August 2022 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 zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 6. August 2022 Melden Share Geschrieben 6. August 2022 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 More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.