Godot 4’te Karakter Hareketi İçin Görsel İzler Oluşturma

Godot 4'te Karakter Hareketi İçin: Godot 4'te Karakter Hareketi İçin Godot 4'te Karakter Hareketi İçin kapsamında, Hareket izleri (gösterişli bir karakterin arkasında kalan solgun hayalet kopyalar) oyun hissi açısından en hızlı kazançlardan biridir. Herhangi bir fizik…

4
Paylaş
Godot 4’te Karakter Hareketi İçin Görsel İzler Oluşturma

Godot 4'te Karakter Hareketi İçin: Godot 4'te Karakter Hareketi İçin

Godot 4'te Karakter Hareketi İçin kapsamında, Hareket izleri (gösterişli bir karakterin arkasında kalan solgun hayalet kopyalar) oyun hissi açısından en hızlı kazançlardan biridir. Herhangi bir fizik değişikliği olmadan hızı okunabilir hale getirirler. Godot 4’te sıfırdan nasıl bir bileşen oluşturulacağını ve ardından onu yeniden kullanılabilir bir bileşene dönüştürmenin ipuçlarını burada bulabilirsiniz.

Godot 4'te Karakter Hareketi İçin nedir, nelere dikkat edilir

Godot 4'te Karakter Hareketi İçin ile ilgili temel noktaları aşağıda adım adım özetliyoruz.

Godot 4'te Karakter Hareketi İçin kapsamında, Nasıl çalışır Fikir basit: Her N milisaniyede bir, karakterin mevcut hareketli kare çerçevesinin ve konumunun anlık görüntüsünü alın, ardından bu anlık görüntüyü karartın. Birkaç anlık görüntüyü üst üste koyun ve bir iz elde edin. Başlamak için fizik yok, gölgelendirici gerekmiyor. Adım 1: hayalet sahne Sprite2D köküyle yeni bir sahne oluşturun. Buna TrailGhost adını verin.

Godot 4'te Karakter Hareketi İçin kapsamında, Bu betiği verin: class_name TrailGhost, Sprite2D işlevini genişletir play(tex: Texture2D, bölge: Rect2, use_region: bool, şurada: Vector2, flipped_h: bool, alpha_start := 0,7, süre := 0,25) -> geçersiz: doku = doku bölge_doğru = bölge bölge_enabled = kullanım_bölgesi global_position = en flip_h = ters çevrilmiş_h modüle.a = alpha_start var t := create_tween() t.tween_property(self, “modülasyon:a”, 0.0, süre) .set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN) t.tween_callback(queue_free) Bu hayalet, kaynak sprite’ın geçerli çerçeve verilerini okur, kendisini doğru dünya konumuna bırakır ve solma sonrasında otomatik olarak yok eder.

Tasarım ve teknik ayrıntılar

Godot 4'te Karakter Hareketi İçin kapsamında, Region_rect kopyası, anlık görüntünün tüm model sayfası yerine doğru animasyon karesine gelmesini sağlayan şeydir. Adım 2: iz yayıcı Karakter sahnenize bir çocuk ekleyin Hayır de2D Trail’i aradı.

Bu betiği verin ve karakterin AnimatedSprite2D’sine (veya Sprite2D) bir referansı dışa aktarın: extends Node2D @export var hayalet_scene: PackedScene @export var kaynağı: AnimatedSprite2D @export var aralığı:= 0,04 # saniye hayaletler arasında @export var hayalet_duration := 0,25 @export var alpha_start := 0,65 var _timer := 0,0 var _active := false func active() -> void: _active = true func deactivate() -> void: _active = false func _process(delta: float) -> void: _aktif değilse: dönüş _timer += delta if _timer geçersiz: kaynak değilse veya hayalet_scene değilse: dönüş var g: TrailGhost = hayalet_scene.instantiate() get_tree().current_scene.add_child(g) # dünya alanı, karaktere bağlı değil var çerçeveler := source.sprite_frames var anim := kaynak.animasyon var çerçeve_idx := kaynak.çerçeve var tex := çerçeveler.get_frame_texture(anim, çerçeve_idx) g.play(tex, Rect2(), false, kaynak.global_pozisyon, kaynak.flip_h, alpha_start, hayalet_duration) Sahne köküne karakter yerine hayaletin eklenmesi, karakter hareket etse bile hayaletin doğru dünya konumunda kalması anlamına gelir.

Godot 4'te Karakter Hareketi İçin

Eğer onu karaktere bırakırsanız, o da takip eder ve iz çöker. Adım 3: bunu bir çizgiye bağlayın İzlenmesini istediğiniz herhangi bir hareketin etrafında active() ve deactivate() çağrılarını yapın.

Bugünden bakınca ne kadar güvenilir?

Karakter komut dosyasında tipik bir çizgi şuna benzer: func _dash() -> geçersiz: $Trail.activate() var t := create_tween() t.tween_property(self, “hız”, dash_dir * dash_speed, 0.0) wait get_tree().create_timer(dash_duration).timeout $Trail.deactivate() Sürekli hıza dayalı parkurlar için (yarış oyunları, kurşun cehennemi), manuel geçişi atlayabilir ve bunun yerine hızdan sürebilirsiniz: func _process(delta: float) -> void: var hız := hız.uzunluk() eğer hız > trail_threshold ise: $Trail.activate() başka: $Trail.deactivate() Adım 4: güzel görünmesini sağlayın Birkaç küçük değişiklik büyük fark yaratır: Aralık ve süre oranı — aralık hayalet_duration’a yakınsa, hayaletler seyrek olur ve iz noktalı gibi görünür.

Kesintisiz bir seri elde etmek için aralığı yaklaşık olarak Ghost_duration’un altıda biri kadar tutun (örn. 0,04s / 0,25s). Hayaletleri renklendirin — play() işlevini çağırmadan önce modülasyonu bir renkle çarpın. Camgöbeği buz çizgileri için iyi çalışır; ateş için turuncu.

Bunu Trail düğümünde dışa aktarma olarak ayarlayın: @export var tint := Color.WHITE # _spawn_ghost() içinde, g.play()’den sonra: g.modulate *= tint Z-index — TrailGhost’a karakterden daha düşük bir z_index değeri verin (örn. -1), böylece iz hareketli grafiğin üstünde değil arkasında durur.

Okuyucu için pratik anlamı

AnimatedSprite2D çerçevelerinde izleri katmanlayın — karakteriniz, Region_enabled = true değerine sahip paketlenmiş bir model sayfası kullanıyorsa, Region_rect yerine Texture_region_rect’i okuyun ve hayalette Region_enabled = true değerini ayarlayın. Yukarıdaki komut dosyası bir Rect2() yer tutucusu bırakır; çerçeveniz varsa onu source.get_rect() ile değiştirin Bu şekilde paketleniyorlar.

Queue_free’yi ne zaman havuza koyacağınız kısa atılımlar için uygundur, atılma başına 5-10 hayalet ortaya çıkar. Saniyede onlarca düşman (uçan düşmanlar, mermi desenleri) yaymaya başladığınızda tahsis baskısı artar. Küçük bir havuz (önceden ortaya çıkan 20 hayalet, örneklendirmek/serbest bırakmak yerine gizleyin/gösterin) kare süresini sabit tutar.

Hasar sayıları gönderisindeki aynı havuzlama modeli doğrudan burada da geçerlidir. Bitmiş iz İşin özü budur: kendi kendini yok eden bir hayalet sahnesi, zamanlayıcıyla çalıştırılan bir yayıcı ve hareket mantığınıza bağlı bir açma/kapama sinyali. Yetenek başına aralık, süre ve renk tonunu ayarlayarak oyundaki her atılım için farklı bir kişiliğe sahip olursunuz.

Havuzlama, renk modları ve halihazırda kablolu tek çağrı API’si olan tek bir eklenti eklemeyi tercih ederseniz, Saltmire Trail’in yaptığı da tam olarak budur. Bunu inşa etmek yerine bırakmayı tercih ederseniz, Saltmire Trail bunu hazır bir araç olarak yapar: https://saltmire.itch.io/saltmire-trail Orijinal olarak https://saltmire.github.io/godot-4-motion-trail-afterimage.html adresinde yayınlanmıştır.

Ek okuma: MDN Web Docs

Editörün Notu

Karakter hareketlerine görsel izler eklemek, oyunun hız ve akıcılık hissini artırır; Godot 4’te basit anlık görüntülerle bunu kolayca uygulayarak oyun deneyimini zenginleştirebilirsiniz.

Emre Demir
Yazar

Yazılım Editörü

Yazılım editörü ve full-stack geliştirici. Uygulama incelemeleri, kodlama rehberleri ve verimlilik araçları üzerine yazıyor. Açık kaynak projelere katkıda bulunuyor; karmaşık konuları yeni başlayanların anlayacağı şekilde anlatmaya özen gösteriyor.

Tüm yazıları gör →