Aderenza e derapata
Lezione 4 di 20 del corso Gioco Godot: Circuito al neon di Coddy.
Sterza bruscamente e l'auto slitta come un disco da hockey: punta in una direzione e si muove in un'altra. Gli pneumatici impediscono che accada. Permettono all'auto di rotolare in avanti, ma non di lato.
forward.orthogonal() punta verso il lato dell'auto. Scomponi la velocità nella componente lungo questa direzione e sottrai gran parte di quella componente a ogni fotogramma:
var side := forward.orthogonal()
velocity -= side * velocity.dot(side) * minf(1.0, grip * delta)Con grip impostato su 7, dopo una svolta l'auto segue il muso con un leggero ritardo, con una breve derapata. Più bassa è la presa, più lunga è la derapata. minf(1.0, ...) fa sì che in un fotogramma non venga mai sottratta più dell'intera componente laterale.
Sfida
Facile- Aggiungi
@export var grip := 7.0. - Dopo la sterzata, elimina la velocità laterale come sopra.
- Premi «Gioca» e affronta una curva. Prova un grip di 2 nell'Inspector per derapare.
Provalo tu
extends Node2D
@export var accel := 260.0
@export var max_speed := 200.0
@export var turn_speed := 3.2
@export var drag := 0.6
var velocity := Vector2.ZERO
func _physics_process(delta: float) -> void:
var throttle := Input.get_axis("move_down", "move_up")
var steer := Input.get_axis("move_left", "move_right")
var forward := Vector2.RIGHT.rotated(rotation)
var speed := velocity.dot(forward)
if throttle < 0.0 and speed > 10.0:
velocity += forward * throttle * accel * 1.6 * delta
else:
velocity += forward * throttle * accel * delta
rotation += steer * turn_speed * delta * clampf(absf(speed) / 90.0, 0.0, 1.0) * signf(speed + 0.01)
velocity *= 1.0 - drag * delta
velocity = velocity.limit_length(max_speed)
position += velocity * delta
$Exhaust.emitting = throttle > 0.0
Tutte le lezioni di Gioco Godot: Circuito al neon
Esercitati da solo: Playground Godot