Çatışma
Çatışma, ayrık bir sistemden ziyade daha çok soyut bir sistemdir. Birlikte çalışan birkaç farklı sistemin karmaşık bir etkileşimidir ve uygulamanın karmaşıklığı büyük ölçüde tasarımın karmaşıklığına bağlıdır.
Oyunumuzda tasarımın kapsamı oldukça basittir. Oyuncunun tek bir saldırı yolu vardır: Düşmanın üzerine atlamak. Düşmanların oyuncuya saldırmasının ise iki farklı yolu vardır: Düşman türüne bağlı olarak yakın dövüş ve temas.
Oyuncunun saldırısı ve düşman yakın dövüş saldırısı için temel unsurlar hemen hemen aynıdır. Karakterin yakın dövüş saldırısını nasıl yapabileceğine bağlı olarak iskelet örgü üzerine yerleştirilmiş bir veya daha fazla isabet alanımız ve ayrıca isabet açısından test edilebilir olmasını istediğimiz alanı yaklaşık olarak belirlemek için bir veya daha fazla hasar alanımız vardır.
Düşman temas saldırısında, oyuncunun düşmanla temas edip etmediğini kontrol etmek için düşmanın kapsül çarpıştırıcısını kullanırız ve yakın dövüş için gerçekleştirdiğimiz isabet eylemlerinin aynılarını gerçekleştiririz. Bir karakter isabet aldığında ne olacağına ilişkin uygulamayı, şurada bulunabilecek olan karakter temel sınıfımızda görebilirsiniz: Parrot\Source\Parrot\Public\Character\ParrotCharacterBase.h. İşlevsel mantık burada ve ParrotPlayerCharacter.h ile ParrotEnemyCharacterBase.h alt sınıflarında yer alır.
Oyuncu Karakteri
Oyuncuya ilişkin kurulum, bir düşmana saldırılırken bu kurulumun çalışma biçimi açısından benzersizdir. Oyuncu bir düşmanın hasar alanıyla çakıştığında düşman, saldırının geçerli olup olmadığını sormak için bu bilgiyi oyuncuya iletir. Bu durumda ise oyuncunun, hasar alanının üstünde olup olmadığını kontrol ederek oyuncunun hasar alanının üstüne indiğinden ve alana yanlardan veya aşağıdan isabet etmediğinden emin olur. Saldırı geçerliyse düşman oyuncuya bir zıplama gerçekleştirme işareti verir. Oyuncu, hasar alanı ile temas ettiğinde hâlâ zıplama tuşunu basılı tutuyorsa daha yükseğe zıplayacaktır. Tuşun, hasar alanı ile temas kurulmadan önce serbest bırakılması daha düşük yükseklikte bir zıplamaya neden olacaktır.
Düşman Karakteri
Düşmanın kurulumu birkaç nedenden dolayı biraz daha karmaşıktır. Yakın dövüş saldırılarının gerçekçi görünmesini isteriz; bu yüzden düşman hasar alanları düşmanların silahlarının kenarlarına yerleştirilir. İsabet alanları, hasar alanları ve kapsül çarpıştırıcısı kurulumu, bir düşman karakteri blueprint’inin görünüm penceresinde görülebilir. Bu, şurada bulunan görünüm penceresi gibi bir görünüm penceresi olabilir: Blueprint’ler > Düşman > İskelet > BP_EnemyCharacter_Skeleton.
Bu örnekte kafadaki hasar alanını, silahtaki isabet alanını ve kapsül çarpıştırıcısını görebilirsiniz. Bu tetikleyicilerin her biri çakışma olaylarını karakter temel sınıfındaki üst fonksiyonlara yönlendirir.
Ayrıca, saldırı animasyonları, silahın sallandığı animasyon kısmı sırasında yalnızca silahın isabet alanlarını etkinleştiren bildirim olayları gönderir. Bu şekilde, oyuncu sadece düşmanla temas edip rastgele bir anda hasar almak yerine, silahla gerçekten vurulmuş gibi hisseder ve görür. Bu animasyon bildirimleri, saldırı animasyonunun belirli noktalarına eklenerek hasar alanının etkinleştirilmesini ve ardından devre dışı bırakılmasını tetikler. Belirli bir düşman karakterin saldırı animasyonundaki kurulum ile Blueprint’ler > Düşman/EnemyBase > BP_AnimNotify_EnemyAttackBegin ve Blueprint’ler > Düşman > EnemyBase > BP_AnimNotify_EnemyAttackEnd bölümlerinde animasyon bildirimlerini görebilirsiniz. Örneğin, Öğeler> Quaternius > PirateKit > Karakterler > Headless_Skeleton > Animasyonlar > Characters_Skeleton_Headless_Anim_CharacterArmature_Sword.
Düşman karakter, çakışmaları kontrol eden ve olayları tetikleyen karakterdir. Yani düşman, uygun çakışmalar tespit edildiğinde hem kendi HitCharacter() hem de oyuncunun HitCharacter() fonksiyonlarını tetikler.
İsabet alanı ve hasar alanı üzerindeki eylemlerin çakıştığı kodu şuradaki HitBeginOverlap() ve HurtBeginOverlap() fonksiyonlarında görebilirsiniz: Papağan\Kaynak\Papağan\Genel\Karakter\ParrotEnemyCharacterBase.h
Boss Çatışması
Boss savaşında boss, oyuncu tarafından vurulduğunda “öfke” sekansının oynatılması için ek bir işlevsellik bulunur. Boss’un yanıtını tetikleyen blueprint kodunu burada görebilirsiniz: Blueprint’ler > Düşman > BossShark > BP_EnemyCharacter_BossShark.
“Öfke” sekansı, boss’un yürüme hızını artırmadan ve görsel efekt için yeşil alev Niagara bileşenini etkinleştirmeden önce belli bir “kafa sallama” animasyonu oynatan basit bir zamanlı sekanstır. Bu sekans sırasında ayrıca hasar kutusunu devre dışı bırakır, böylece boss yenilmez olur.