Jump to content
Unity Insider Forum
Sign in to follow this  
Fazeli24

Object Drehen

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

Share this post


Link to post
Share on other sites

Hallo

 

Dann musst die Transform Komponente des Object bearbeiten. In dem Fall Rotation und dann die entsprechende Achse.

Also Tastendruck abfangen und dann transform rotation des gewollten go modifizieren. 

 

Christoph

Share this post


Link to post
Share on other sites

Meinst du, dass sich das Objekt über einen gewissen Zeitraum hinweg ausrichtet? Oder dass es sich so lange gleichmäßig dreht, wie man die Taste gedrückt hält?

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...