Jump to content
Unity Insider Forum

Object Drehen


Fazeli24

Recommended Posts

Hallo an alle,

 

ich weiß das das für die meisten eine einfache Frage ist, aber ich als totaler  Unity Anfänger komm einfach nicht weiter.

Und da mein Englisch auch nicht das beste ist versteh ich leider nicht was da auf der Unity Seite steht.

Also zu meiner Frage: Ich möchte das wenn ich eine Taste drücke, sich ein Objekt in eine bestimmte Richtung dreht.

 

Danke schon mal im Vorraus

Fazeli24

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich fang einfach mal ganz von vorne an, auch auf die Gefahr hin, dass ich Dinge sage, die du schon weißt :)

Transform.Rotate kennst du dann ja sicherlich. Das dreht ein Objekt einmalig in eine bestimmte Richtung. Ist also eher wie ein Teleport als eine Bewegung. Das Objekt ist "so" ausgerichtet, Rotate wird aufgerufen, jetzt ist das Objekt anders ausgerichtet, fertig. Um ein Objekt kontinuierlich zu drehen, musst du diese Methode immer wieder aufrufen lassen, sodass es sich immer wieder ein kleines Stückchen weiter dreht. Das geht z.B. in Update.

private void Update()
{
  transform.Rotate(0, 10, 0);
}

Update wird ja jeden Frame aufgerufen, also bei 60 FPS 60-Mal die Sekunde. Das Objekt dreht sich also 60-Mal 10°, also 600° pro Sekunde. Hätten wir aber nur 30 FPS, dann wären es nur 30 kleine Drehungen und damit hätten wir eine Drehgeschwindigkeit von 300° pro Sekunde. Das ist nicht so gut, daher schmeißen wir Time.deltaTime drauf.

private void Update()
{
  transform.Rotate(0, 10 * Time.deltaTime, 0);
}

Time.deltaTime ist die Zeit seit dem letzten Update in Sekunden. Bei 60 FPS ist das 1/60, bei 30 FPS 1/30. Der Wert ist also doppelt so hoch wenn wir nur halb so viele Frames pro Sekunde haben. Man kann das daher als "pro Sekunde" lesen, sodass "10 * Time.deltaTime" als "10° pro Sekunde" gelesen werden kann.

Jetzt müssen wir nur noch machen, dass Rotate nur dann aufgerufen wird, wenn die Taste gedrückt ist. Das machen wir mit einer if-Abfrage:

private void Update()
{
  if (Input.GetKey(KeyCode.Space))
  {
    transform.Rotate(0, 10 * Time.deltaTime, 0);
  }
}

Zur Erinnerung: Update wird jeden Frame aufgerufen. Das heißt, dass jeden Frame geschaut wird, ob Space gerade gedrückt wird. Wenn ja, bewegen wir uns einen Schritt weiter, was, wenn wir die Taste über mehrere Frames am Stück halten, zu einer Bewegung wird. Wenn nein, passiert gar nichts, was Stillstand bedeutet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...