Menu
CoddyTech

Yol Tutuşu ve Drift

Coddy'nin Godot Oyunu: Neon Pisti kursunda ders 4 / 20.

Keskin dönünce araba hokey diski gibi kayar: bir yöne bakarken başka bir yöne gider. Lastikler bunu önler. Arabanın ileri doğru yuvarlanmasını sağlarlar ama yana doğru gitmesini önlerler.

forward.orthogonal(), arabanın yan tarafını gösterir. Hızı bu yöndeki bileşenine ayır ve her karede bu bileşenin büyük kısmını çıkar:

var side := forward.orthogonal()
velocity -= side * velocity.dot(side) * minf(1.0, grip * delta)

grip değeri 7 olduğunda araba, dönüşten kısa süre sonra burnunun yönünü takip eder ve kısa süreliğine kayar. Tutuş azaldıkça kayma uzar. minf(1.0, ...), bir karenin yana doğru bileşenin tamamından fazlasını çıkarmamasını sağlar.

challenge icon

Görev

Kolay
  1. @export var grip := 7.0 ekle.
  2. Döndükten sonra, yukarıdaki gibi yana doğru olan hızı azalt.
  3. “Oyna” düğmesine bas ve bir virajı dön. Drift yapmak için Inspector'da 2 tutuş değeri dene.

Kendin dene

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

Godot Oyunu: Neon Pisti bölümündeki tüm dersler

Kendi başına pratik yap: Godot playground