Jump to content
Unity Insider Forum

Problem mit Winkel + eulerAngle bei Auto...


Elharter

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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);
         }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...