@@ -13,6 +13,11 @@ public class movement : MonoBehaviour
1313 public float MaxSpeed = 10f ;
1414 bool isGrounded = false ; // Flag, um zu überprüfen, ob das Auto den Boden berührt
1515 public GameObject Ground ;
16+ private float currentSpeed = 0f ; // Aktuelle Geschwindigkeit für realistische Lenkung
17+ public float minSpeedForTurning = 1f ; // Minimale Geschwindigkeit, um lenken zu können
18+ private float currentTurnInput = 0f ; // Aktuelle Lenkeingabe für sanfte Übergänge
19+ public float turnAcceleration = 3f ; // Wie schnell die Lenkung beschleunigt
20+ public float turnDeceleration = 5f ; // Wie schnell die Lenkung abbremst
1621
1722 // Start is called before the first frame update
1823 void Start ( )
@@ -41,7 +46,9 @@ void Update()
4146 }
4247 */
4348 Vector3 speeed = new Vector3 ( rb . linearVelocity . x , 0f , rb . linearVelocity . z ) ;
44- if ( speeed . magnitude > MaxSpeed )
49+ currentSpeed = speeed . magnitude ; // Aktuelle Geschwindigkeit berechnen
50+
51+ if ( currentSpeed > MaxSpeed )
4552 {
4653 Vector3 newVelocity = speeed . normalized * MaxSpeed ;
4754 rb . linearVelocity = new Vector3 ( newVelocity . x , rb . linearVelocity . y , newVelocity . z ) ;
@@ -62,32 +69,52 @@ void Update()
6269 if ( Input . GetKey ( KeyCode . W ) && isGrounded )
6370 {
6471 rb . AddForce ( transform . forward * MaxSpeed ) ;
65- turn = true ;
6672 }
6773
6874 // Rückwärtsbewegung
6975 if ( Input . GetKey ( KeyCode . S ) && isGrounded )
7076 {
7177 rb . AddForce ( - transform . forward * MaxSpeed ) ;
72- turn = true ;
7378 }
7479
75- // Linksdrehung
76- if ( Input . GetKey ( KeyCode . A ) && turn )
80+ // Realistische Lenkung: Nur wenn das Auto sich bewegt
81+ float speedFactor = Mathf . Clamp01 ( currentSpeed / minSpeedForTurning ) ; // Lenkfaktor basierend auf Geschwindigkeit
82+
83+ // Lenkeingabe erfassen
84+ float targetTurnInput = 0f ;
85+ if ( Input . GetKey ( KeyCode . A ) )
7786 {
78- transform . Rotate ( Vector3 . up , - turnSpeed * Time . deltaTime ) ;
87+ targetTurnInput = - 1f ; // Links
7988 }
80-
81- // Rechtsdrehung
82- if ( Input . GetKey ( KeyCode . D ) && turn )
89+ else if ( Input . GetKey ( KeyCode . D ) )
8390 {
84- transform . Rotate ( Vector3 . up , turnSpeed * Time . deltaTime ) ;
91+ targetTurnInput = 1f ; // Rechts
8592 }
86-
87- // Zurücksetzen der Drehung
88- if ( ! Input . GetKey ( KeyCode . A ) && ! Input . GetKey ( KeyCode . D ) )
93+
94+ // Sanfte Beschleunigung/Verlangsamung der Lenkung
95+ if ( targetTurnInput != 0f )
96+ {
97+ // Beschleunigung zur Ziel-Lenkeingabe
98+ currentTurnInput = Mathf . MoveTowards ( currentTurnInput , targetTurnInput , turnAcceleration * Time . deltaTime ) ;
99+ }
100+ else
89101 {
90- turn = false ;
102+ // Verlangsamung zu 0, wenn keine Taste gedrückt wird
103+ currentTurnInput = Mathf . MoveTowards ( currentTurnInput , 0f , turnDeceleration * Time . deltaTime ) ;
104+ }
105+
106+ // Lenkung anwenden, nur wenn Auto sich bewegt und wir eine Lenkeingabe haben
107+ if ( speedFactor > 0.1f && Mathf . Abs ( currentTurnInput ) > 0.01f && isGrounded )
108+ {
109+ float turnAmount = currentTurnInput * turnSpeed * speedFactor * Time . deltaTime ;
110+
111+ // Bei Rückwärtsfahrt umgekehrte Lenkung (wie bei echten Autos)
112+ if ( Vector3 . Dot ( rb . linearVelocity , transform . forward ) < 0 ) // Rückwärts
113+ {
114+ turnAmount = - turnAmount ;
115+ }
116+
117+ transform . Rotate ( Vector3 . up , turnAmount ) ;
91118 }
92119
93120 // Bremsen, wenn keine Bewegungstasten gedrückt werden
0 commit comments