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

Problem mit Winkel + eulerAngle bei Auto...

Recommended Posts

Hi Leute,

 

ich hab heute schon wieder zuviel Code im Hirn, das ich vor lauter Bäume den Wald nicht mehr sehe.

Ist Zustand:

- 1 Auto

- 1 Rigibody

 

Das Auto fährt, 2 Reifen berühren einen Gegenstand und das Auto fährt ewig auf 2 Reifen davon.

Gut..... transform.rotation.eulerAngle brauch ich also.

 

Mein Problem ist, meine Werte schwanken (aufgrund der Federn und des Geländes) von 355, 356, 360...bis zu 2.... wo das Auto "gerade" wirkt.

Wie bewerkstellige ich also so einen Bereich als Max-Limit wenn ich bspw. nicht über einen Winkel von sagen wir 35° nicht überschreiten will, egal ob links oder rechts seitlich.

 

Ich weiß die Antwort ist so einfach :(

danke für den Hint

Share this post


Link to post
Share on other sites

Mach halt ein GameObject für die Radaufhängung, das sich um die vertikale Achse dreht. Dem ordnest du dein Rad unter, das sich ausschließlich um seine lokale horizontale Achse dreht.

Share this post


Link to post
Share on other sites

mhhh ich glaube ich habe mich falsch ausgedrückt....es geht mir nicht um ein Rad oder um ähnliches.

Ich will einfach per eulerAngle den maximwinkel einschränken...

Share this post


Link to post
Share on other sites

Ok, gelöst:

 

public float rotCorrect = 5;    // for smoothness keep between 5-10
                                     // to low will be watered out by collision resolution
                                     // to high will jitter, or jump
     public float correctAt = 30;    // should not ever exceed 90, and in some cases
                                     // should never exceed 45 depending.



// keeps the player upright by performing sutle corrections to the rotation
         if((transform.eulerAngles.x>=correctAt)&&(transform.eulerAngles.x<180)){
             transform.Rotate(-rotCorrect,0,0);
         }
         if((transform.eulerAngles.x<=(360-correctAt))&&(transform.eulerAngles.x>=180)){
             transform.Rotate(rotCorrect,0,0);
         }
         if((transform.eulerAngles.z>=correctAt)&&(transform.eulerAngles.z<180)){
             transform.Rotate(0,0,-rotCorrect);
         }
         if((transform.eulerAngles.z<=(360-correctAt))&&(transform.eulerAngles.z>=180)){
             transform.Rotate(0,0,rotCorrect);
         }

 

Share this post


Link to post
Share on other sites

Ach so...

Da ist aber der einfachste Weg, nicht Rotate zu benutzen, sondern den Winkel selber zu mainteinen und ihn dann nur zu setzen.

private float angle = 0;
private float min = -10;
private float max = 20;

private void Update()
{
  angle += Whatever();
  
  angle = Mathf.Clamp(angle, min, max);
  
  var eulerAngles = transform.eulerAngles;
  eulerAngles.x = angle;
  transform.eulerAngles = eulerAngles;
}

 

  • Like 2

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...