Ich versuche eine Kugel mit Benutzerkontrolle zu drehen.Benutzergesteuerte Quaternion Slerp?
void RotateGlobe() {
SetLock();
if (Input.GetMouseButton(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
userInput.x = Input.GetAxis("Mouse X");
userInput.y = Input.GetAxis("Mouse Y");
if (userInput.magnitude > 0 & Physics.Raycast(ray, Mathf.Infinity, LayerMask.NameToLayer("UI")))
{
Vector2 movement = new Vector2(Mathf.Sign(userInput.x), Mathf.Sign(userInput.y));
globe.transform.rotation =
Quaternion.Slerp(globe.transform.rotation,
Quaternion.Euler(0, movement.y * 90, movement.x * 180 + globe.transform.rotation.eulerAngles.x),
Time.time * speed);
}
}
RemoveLock();
}
Ich verstehe nicht ganz, Quaternionen (dann wieder, wer wirklich der Fall ist), aber nicht nur die Kugel nicht richtig auf Benutzereingaben reagiert, wird es auf der x-Achse stecken zu bleiben. Ich nehme an, dass es wahrscheinlich den kürzesten Weg von 180 nach -180 nimmt, indem ich mich nicht bewege.
Ich denke an diesem Punkt bin ich völlig bereit, diesen Code zugunsten einer besseren Methode (nicht Slerp) zu ändern, aber ich bin völlig stecken geblieben und frühere Methoden waren gleichermaßen schwierig und abgehackt.
Wie würden Sie vorschlagen, dass ich diese Kugel rotiere?
Als Bonus, wenn ich eine Achse beschränken könnte, wäre das toll. Ich möchte nicht wirklich weiter als 90 oder -90 drehen.
niemals Quaternionen aus irgendeinem Grund verwenden, Anders. Sie können alle Winkel mit localEulerAngles oder eulerAngles einstellen, oder noch besser ** einfach drehen ** oder vielleicht ** drehenAround ** – Fattie
Ich schätze die Stimmung dahinter, weil ich sie auch hasse, aber Slerp und Lerp sind einfach so glatt und optimiert ... Plus RotateAround ist in 5.4 veraltet. –
RotateAround ist nicht veraltet, Sie verwenden nur die alte: google http://answers.unity3d.com/answers/540399/view.html – Fattie