Skip to content

Commit d289e16

Browse files
committed
realistic steering
1 parent a032b2b commit d289e16

File tree

2 files changed

+45
-15
lines changed

2 files changed

+45
-15
lines changed

Assets/Scenes/SampleScene.unity

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62871,11 +62871,14 @@ MonoBehaviour:
6287162871
m_Name:
6287262872
m_EditorClassIdentifier:
6287362873
turnSpeed: 100
62874-
brakeSpeed: 2
62874+
brakeSpeed: 3
6287562875
rb: {fileID: 1354116875}
6287662876
resetPosition: {fileID: 450434156}
6287762877
MaxSpeed: 50
6287862878
Ground: {fileID: 1156795646}
62879+
minSpeedForTurning: 1
62880+
turnAcceleration: 3
62881+
turnDeceleration: 5
6287962882
--- !u!114 &1354116878
6288062883
MonoBehaviour:
6288162884
m_ObjectHideFlags: 0

Assets/movement.cs

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)