Çarpışma Türleri
Unreal Engine’deki çarpışma, Unity’ye benzer olsa da burada ele alınan bazı farklılıkları bulunuyor. Unity’nin katman tabanlı çarpışma algılamasını kullandıysanız projenin çarpışma ayarları çarpışma matrisine benzer görünmelidir. Buna Düzenle > Proje Ayarları > Çarpışma bölümüne giderek erişebilirsiniz. Önayar sekmesini genişletirseniz, varsayılan tüm önayar profillerini ve bunların işlevlerine ait açıklamaları görebilirsiniz.
Unreal’ın çarpışmaları çözme konusunda birkaç seçenek daha sunduğunu fark edeceksiniz. Bunlar Unreal Engine’de Çarpışmalara Genel Bakış bölümünde derinlemesine ele alınmaktadır. Çarpışma algılamada bu seviyede ayrıntı olması güzel bir özellik olup oyununuzun performansını artırabilir. Anlaşılması gereken önemli noktalar şunlardır:
Kanallar veya tekil çarpıştırıcılar Bloklama, Çakışma veya Yok Say olarak ayarlanabilir.
Sık yapılan bir hata, bu olaylara ihtiyaç duyduğunuzda çarpışmalarda Çakışma Olayları Oluştur onay kutusunun doğru şekilde işaretlenmemesidir.
Statik geometri, bloklama ve çakışma olmalı ancak oynanış için lazım olmadığından çakışma veya isabet olayları oluşturması gerekmez.
Özellikle yüksek hızlarda hareket ederken bir obje başka bir objeyi engellese bile çakışma olayları oluşturulabilir. Unity’de Rigidbody bileşeni yerine doğrudan yer değiştirmeyi düzenliyorsanız bu durum sorun yaratabilir. Bunu yapmak fizikle ilgili hususları atlar.
Unreal’da aktörün dönüşümünü güncelleyen bir fonksiyonu çağırdığınızda, aktörün nasıl hareket etmesini istediğinizi belirleyen iki boole parametresi vardır:
Süpür true olarak ayarlanırsa, çakışmaları tetikler ve engellenirse aktörü hedef noktaya varmadan durdurur. Işınlama, fizik hızının korunup korunmayacağını belirler.
Kanallar, Unity’nin fizik aktarımına eşdeğer olan İzlemeler için de kullanılabilir (yani Işın Dökümü, SphereCast vb.). Çizgi İzleme fonksiyonu çağrınızda, Unity’deki ışın dökümünde katman maskesini geçirdiğiniz gibi kanalı da geçirebilirsiniz.
Papağan’daki Özel Çarpışma Türleri
Papağan’da birkaç özel çarpışma objesi kanalı kurulumu yer almaktadır: Oyuncu, Gülle ve Düşman.
Bu obje türlerini ekleyerek, çarpışma izleri dünyada meydana geldiğinde Papağan, bu obje kanallarının izleme kanallarıyla nasıl etkileşime gireceğini tam olarak kontrol edebilir. Genel olarak ne olması gerektiğine dair varsayılan bir yanıt ayarlansa da, bu istenildiği gibi özelleştirilebilir. Papağan’da ayrıca birkaç özel izleme kanalı önayarı yer almaktadır: Oyuncu, OverlapAllPlayers, BlockAllPlayers, Gülle ve Düşman.
Bu önayarlar özellikle oynanış tetikleyicileri için kullanışlıdır. Örneğin, OverlapAllPlayers diğer tüm çarpışmaları yok sayabilir ve sadece oyuncu çarpışma obje türleri ile çarpışma olaylarına yanıt verebilir. Oyundaki farklı örgüler için çarpışma ayarlarına baktığınızda bu önayarların sıklıkla kullanıldığını göreceksiniz.
Çarpışma ayarları istenirse örgü bazında da özelleştirilebilir.
Dünya Sınırları
Bölümlerinizi oluştururken dikkat etmeniz gereken bir nokta da Dünya Sınırları’dır. Bu, Dünya Ayarları > Dünya kısmından ayarlanabilir. Bir aktör bu tanımlanmış dünya sınırlarıyla etkileşime girdiğinde özel bir hasar türü uygulayabilirsiniz. Papağan sınırları, KillZ dünya ayarları ile Sınırların Dışı (Out of Bounds) tetikleme bölgelerinin bir kombinasyonunu kullanır.
Tetikleyici Etki Aktörleri
Unreal Engine’de olayları tetiklemek için kullanılabilecek yerleşik tetikleme bölgesi aktörleri (bkz. Unreal Engine’de Tetikleme Bölgesi Aktörleri) bulunur. Geliştiricilerin bunları Papağan’da kullandığı örnekler arasında Sınırların Dışı ve Bitiş Çizgisi tetikleme bölgeleri yer almaktadır. Tetikleme bölgeleri genellikle bölüm blueprint’i ile birlikte kullanılır (Papağan’daki Bölüm Blueprint’leri geliştirici dokümanına bakabilirsiniz) ancak bu durum zorunluluk değildir. Papağan’ın Sınırların Dışı tetikleyicisi, basit bir olay grafiğine sahip bir kutu tetikleyicisidir:
Ayrıntılar panelinde aktörün çarpışma ayarlarına bakarsanız, burada işin çoğunun çarpışma kanalı önayarı tarafından gerçekleştirildiğini görürsünüz.
Güç Toplama
Papağan’ın güçlendirme toplama uygulamasını kullanarak çarpışma sisteminin pratik bir örneğine bakalım. İçerik > Blueprint’ler > Alınabilir Eşyalar altındaki BP_PickupBase’i açarsanız, görünüm penceresine baktığınızda çarpışma bileşenini içeren hiyerarşiyi görebilirsiniz.
Çarpışma ayarları ve Sınırların Dışı, oyuncularla çakışma olayları oluşturan bir tetikleme önayarına sahiptir:
Olay grafiğine bakarsanız parametre olarak Diğer Aktör ile ActorBeginOverlap olayını görürsünüz. Bu olay Unity’deki OnCollisionEnter gibi çalışır. Buradaki fark, bir çarpıştırıcı bileşeni yerine aktörün kendisinin size verilmesidir.
Papağan, aktörün çakışan bir oyuncu olup olmadığını kontrol etmek için kullanılır. Ardından OnPickedUp olayı çağrılır. Bu, türetilmiş blueprint sınıflarının OnPickedUp için kendi davranışlarını tanımlamasına olanak tanır, temel sınıf ise aktör çakışma olayını kendisi işler.
Geliştiriciler, tüm alınabilir eşyaların ses çıkarmasını ve bazı parçacık efektleri oluşturmasını sağlamak için temel blueprint’i kullanır. Alınabilir eşya sesi ve parçacık efekti değişkenleri, türetilmiş sınıfların sınıf varsayılanlarında ayarlanabilmeleri için örnek olarak düzenlenebilir (instance-editable). Sınıf Varsayılanları Blueprint editörünün üst kısmında, derleme düğmesinin yanında yer alır:
Değiştirilmiş sınıf varsayılanlarına bir örnek, yeşil parçacıklı bir Niagara sistemi kullanan alınabilir hız eşyasında bulunabilir (pembe renkli kalp şeklindeki alınabilir eşyaya karşılık). Benzer şekilde, alınabilir eşya örgüsü de türetilmiş blueprint’lerde ayarlanabilir. Çakışma mantığının son adımı, oyuncu topladıktan sonra aktörün kalmasını istemediğimiz için alma aktörünü yok etmektir.
Sadece birkaç düğüm sayesinde türetilmiş blueprint’lere kolaylıkla genişletilebilen sağlam bir mantık oluşturabilirsiniz. Tüm türetilmiş blueprint’ler, aktöre bağlı bir çakışma olayından kaynaklanır.
Oyuncu Karakterinin Düşmanın Üzerine Zıplaması
Bir başka harika örnek ise düşmanın üzerinden atlayan oyuncudur. Düşmanın kapsül çarpıştırıcı türü “düşman” olup oyuncu obje türleriyle çarpışır. Kılıçlı düşmanlar da benzer bir çakışma olayına sahiptir. Bunlar genellikle isabet kutusu (hit-box) olarak adlandırılır ve saldırının etkili olduğu yerlerdir.
Ancak bir oyuncu düşmanın üzerine atlamak istediğinde Papağan bunu nasıl aşıyor? Çözüm, düşmanların kafalarına bir hasar alanı yerleştirmekte yatıyor. Oyuncu bu hasar alanı bölgesiyle çakıştığında oyuncu karakteri, karakterin konumuna, hasar alanının konumuna ve alanın kapsamına göre bunun geçerli bir zıplama olup olmadığını görmek için bir dizi kontrol yapabilir. Kontroller geçerse, oyuncu zıplayabilir ve düşmana vurabilir. Ağır iş, yine çarpışma kanalları tarafından Papağan’ın ilgilendiği çakışan kısımlar (oyuncu çarpışma objesi ve hasar alanı bölgesindeki düşman) filtrelenerek yapılır.