"bir yazılımcının not defteri.."

4 Ocak 2018 Perşembe

OnHit (vuruş) Event i Hakkında

Merhabalar,

Oyundaki bir karaktere, düşmana ya da başka bir nesneye zarar / hasar veren (damage) bir oyun geliştiriyorsanız, bunlara bir cisimle vurulup vurulmadığının (Hit), ve eğer böyleyse kimin vurduğunun, vurulanın bilmem nerelerinden vurulduğunun, veya yapılan darbeyle ilgili diğer detaylı bilgilerin saptanmasına karar vermeniz gerekebilir; ki çoğunlukla gerekecektir de.

OnHit Event kaynaklı bir çarpışma (collision) olduğunda, örneğin sağlık durumunu değişimi, bir object in yok edilişi, veya başka bir gameplay bağlantılı aksiyonun meydana gelmesi vs. vs. için yukarıda sözü edilen kullanabileceğimiz informasyonu sağlar.


OnHit Event olayını Blueprints ile işleyen bir mini örnek yapacağız şimdi,

burada yok edilebilir (Destructible) bir Mesh üzerinde bir hasar (damage) uygulamak için OnComponentHit Event ini kullanacağız;

bilinmesi gereken bir şey de,  hit in,  meydana geldiği noktada yani ilgili lokasyonda yok edilebilir (destructible) object e bir itme gücü uyguladığıdır; böylece mermi (projectile) hit etkisi simüle edilebilir ve hit location a bir güç uygulanması hesaba katılır. 

o zaman artık başlayalım,

önce bir  Blueprint First Person Template projesini Starter Content i ile yaratalım,

ardından,
Content Browser da, Content/Geometry/Meshes dizininie gidin;

1M_Cube Static Mesh üzerine sağ tıklayın ve Create Destructible Mesh deyin.



burda bir  Static Mesh den Destructible Mesh yaratıyoruz; böylece vurulduğunda parçalanabilir bir mesh elde ediyoruz.

Destructible Mesh Editor içinde, Fracture Mesh button una tıklayıp kaydedelim ve pencereyi kapayalım.



sonra Content Browser içinde yeni yarattığımız Destructible Mesh asset imizin üzerine sağ tıklıyoruz ve açılan menüden Asset Actions ın altındaki alt menüden Create Blueprint Using This… diyoruz.


kaydettiğiniz lokasyonu seçtiğiniden ve yarattığınız yeni Blueprint i isimlendirdiğinizden emin olun.

Blueprint Editor içinde yeni yaratacağımız Blueprint için, Components penceresinde Destructiblecomponent i seçin. 

Details Panel içinde de , Physics kısmı altında Simulate Physics checkbox ını seçin.



Blueprint imiz şimdi fizik simüle edecek.

yine Details Panel içinde, alttaki Events kısmında OnComponentHit Event ine tıklayın.



bu Event Graph a yeni bir node ekleyecektir:



şimdi Other Actor pininden çekin ve Cast To FirstPersonProjectile nodu ekleyin,



burada bir Blueprint i FirstPersonProjectile denen başka bir Blueprint e dönüştürüyoruz (casting), ve Destructible Mesh vurulduğunda bunun olmasını garntiye alıyorz; ki aslına ona vuran (hit eden) FirstPersonProjectile Blueprint idir.

şimdi mesh in dağılmasına script ilave edebiliriz; eğer böyle bi durum yoksa hiç bir şey yapmayacağız.

Event in Hit pin inini sürükleyip Break Hit Result nodu yaratalım:



Break Hit Result nodu hit sonucu ile ilgili bir dizi bilgilere ulaşma imkanı verir.

Hit Actor pin ini sürükleyin ve Break Hit Result nodu yaratın, ve onu da aşağıdaki gibi Apply Point Damage noduna bağlayın.

Apply Point Damage nodunda, Base Damage değerini 100 e ayarlayın ve Damage Type Class tipini Damage Type olarak belirleyin.



Apply Point Damage nodu, sadece vereceği hasarın miktarını değil, hasarın verildiği yeri de belirlememizi sağlar.

Apply Point Damage nodu üzerinde aşağıdaki bağlantıları yapın.



derleyin ve kaydedin; ardından derlenmiş Blueprint asset ini content browser dan level içine sürükleyin;



sonra oyunu başlatın ve küpe projectile ile ateş edin; göreceğiz ki küp atein geldiği yöne göre uygun yönde dağılacak (hasar alacak) (damage) ve parçaları da farklı lokasyonlara dağılacak.

uygulanan gücün (force) miktarı ve projectile in ne zaman bir şeye vurduğu bilgileri kullanılan Event Hit nodunu kullanan FirstPersonProjectile Blueprint içinde tanımlanmıştı,

şimdi, 

Content/FirstPersonBP/Blueprints dizini içinde, FirstPersonProjectile Blueprint ini açın



buradaki Blueprint te isabet olduğunda oluşan güç miktarını kuru içindeki değerden değiştirebilrisiniz; böylece yaratacağımız fizik simülasyonunun etkisini kendimiz belirleyebiliriz.


kısaca bu Hit olayına değinmek istedim; aslında bu konu hayli derin; şu anda C++ ile nasıl yapıldını daha derinlemesine araştırıyorum; ön genel kültür olması için yukarıdaki yazıyı dökümantasyondan okudum; buraya da not ediyorum;

hadi iyi geceler...


Hiç yorum yok: