3 Stimmen

Drehung in Unity3D

Dies ist ein vereinfachter Code von dem, was ich zu tun versuche:

var angle = 1.57;
if ( this.transform.rotation.y > angle ){
  this.transform.rotation.y--;
} else if ( this.transform.rotation.y < angle ){
  this.transform.rotation.y++;
}

Ich bin es gewohnt, in AS3 zu programmieren, und wenn ich das in Flash tue, funktioniert es perfekt, aber in Unity3D nicht, und ich habe eine harte Zeit herauszufinden, warum, oder wie könnte ich diesen Effekt bekommen.

Kann mir jemand helfen? Danke!

bearbeiten:

mein Objekt ist ein Starrkörperauto mit 2 Kapselkollidern, das auf einem "holprigen" Boden fährt, und irgendwann verliert es einfach die Richtungsgenauigkeit, und ich denke, das liegt an seinem hierarchischen Rotationssystem.

(Dank an Kay für den Hinweis auf transform.eulerAngles)

12voto

Kay Punkte 12468

transform.rotation holt eine Quaternion . Versuchen Sie transform.rotation.eulerAngles.y stattdessen.

3voto

Dmitri Wolf Punkte 31

Die Transformationsdrehung wird zum Festlegen eines Winkels verwendet, nicht zum Drehen eines Objekts. Sie müssen also die Drehung ermitteln, Ihre Änderung hinzufügen und dann die neue Drehung festlegen.

Versuchen Sie stattdessen transform.rotate zu verwenden.

Sehen Sie sich die Unity3d-Skripting-Referenz hier an: http://unity3d.com/support/documentation/ScriptReference/Transform.Rotate.html

1voto

marsbear Punkte 1429

Ich sehe bisher zwei Probleme. Erstens die hierarchische Rotation von Unity. Basierend auf dem, was Sie zu erreichen versuchen, sollten Sie entweder manipulieren

transform.localEulerAngles
or
transform.eulerAngles

Zweitens können Sie die Euler-Winkel auf diese Weise nicht ändern, da die Vektoren alle als Wert übergeben werden:

transform.localEulerAngles.y--;

Sie müssen es so machen:

Vector3 rotation = transform.localEulerAngles;
rotation.y--;
transform.localEulerAngles = rotation;

0voto

Sumeet Jindal Punkte 872

Sie müssen ein neues Quaternion-Objekt erstellen

transform.rotation = Quaternion.Euler ( transform.rotation.x, transform.rotation.y++, transform.rotation.z );

Sie können auch die Funktion transform.Rotate verwenden.

0voto

CM90 Punkte 735

Der obige Vorschlag, transform.Rotate( ) zu verwenden, ist wahrscheinlich das, was Sie tun müssen, um es tatsächlich zu drehen, ABER die Variablen von transform.Rotate( ) sind Geschwindigkeit/Geschwindigkeit und nicht die Richtung, so dass transform.Rotate( ) mehr als eine Achse verwenden muss, wenn Sie eine schräge Drehung wünschen. Bsp:

class Unity // Example is in C#
{
    void Update( )
    {
        gameObject.transform.Rotate(0, 1, 0);
    }
}

Dadurch wird das Objekt um seine y-Achse mit einer Geschwindigkeit von 1 gedreht.

Lassen Sie mich wissen, ob dies hilfreich ist - und wenn es hinderlich ist, kann ich es anders erklären.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X