leonscottkfm

Unreal MVP
31 May 2015
1,537
5
219
63
28
(34) İstanbul Avrupa
store.steampowered.com
Şimdi oyunda bir yapay zeka bize saldırsın istiyorsak kendi karakterimizi cast etmeliyiz ve saldırma işlemlerinden sonra applydamage vs vermeliyiz.

Fakat şöyle bir sorun ortaya çıkıyor. Oyunda 200 tane farklı npc birbirine saldıracak mesela her biri için diğer her karakteri Cast mı edeceğiz ? Tamam bu npc bana saldırabilir fakat aynı zamanda diğer npclere de saldırabilir ? Bu işin içinden nasıl çıkılır ? Herkese saldıracak mesela bu npc. Hem oyunculara hem yapay zekalara saldıracak mesela.
 
Saldırılabilir aktörlere tag ekleyebilirsin. Actor has tag nodu ile saldırılabilir olup olmadığını kontrol edebilirsin. Interface kullanarak da farklı aktörlerde cast yapmadan aynı fonksiyonu implement edip çağırabilirsin. Zaten apply damage fonksiyonları aktör sınıfında olduğu için oluşturduğun tüm aktörlerde inheritence ile geliyor o fonsiyon cast yapmana gerek yok. hit result ya da overlap dan gelen aktör pinine direk apply damage bağlayabilirsin.
 
Bu yetersiz bir yöntem bence. Mesela aktörlerin can değerleri var canı 20 ye gelirse vurmasını istemiyorum diyelim ki. Aktörün can değerini göremem ki ? Genel bir aktör kavramı olduğu için. Farklı bir yöntem vardır ama ne olduğunu ben bilmiyorum... Blueprint interfacenin ne işe yaradığını bilmiyorum...
 
Dediğimi yapabilirsin yetersiz değil. Saldırılabilir aktörlere health interface diye bir interface oluşturup ekle. GetHealth fonksiyonu yarat. Bu interface i eklediğin tüm aktör sınıflarına implement edebilirsin. Cast yapmana gerek kalmaz. Yeni aktör sınıfları eklediğinde mevcut sistemde değişiklik yapmanı gerektirmez. Sadece eklediğin her sınıfa bu fonsiyonu implement edeceksin o kadar. 

Bu da yetersiz geliyorsa daha gelişmiş bir sistem component sistemini dene. Saldırılabilir tüm aktörlere kendin oluşturduğun bir health component ekle. Hit result ya da overlaptan gelen aktöre get component by class ile health componenti çağır. Is valid nodu ile saldırılabilir olup olmadığını anlarsın. Valid ise gelen componentten canına bakıp saldırtabilirsin. Ben component sistemini tercih ederim çünkü bu komponenti başka oyunlarda da kullanabilirsin migrate ile.
 
Dediğimi yapabilirsin yetersiz değil. Saldırılabilir aktörlere health interface diye bir interface oluşturup ekle. GetHealth fonksiyonu yarat. Bu interface i eklediğin tüm aktör sınıflarına implement edebilirsin. Cast yapmana gerek kalmaz. Yeni aktör sınıfları eklediğinde mevcut sistemde değişiklik yapmanı gerektirmez. Sadece eklediğin her sınıfa bu fonsiyonu implement edeceksin o kadar. 

Bu da yetersiz geliyorsa daha gelişmiş bir sistem component sistemini dene. Saldırılabilir tüm aktörlere kendin oluşturduğun bir health component ekle. Hit result ya da overlaptan gelen aktöre get component by class ile health componenti çağır. Is valid nodu ile saldırılabilir olup olmadığını anlarsın. Valid ise gelen componentten canına bakıp saldırtabilirsin. Ben component sistemini tercih ederim çünkü bu komponenti başka oyunlarda da kullanabilirsin migrate ile.

Burada Cnrt aslında tam olması gereken bilgiyi vermiş, multiplayer bir oyun düşün, zaten kimseyi kimseye cast edemez, dolayısıyla elinde " Tag, interface, component" seçeneklerinden başka bir şey yok ki sonuç almak için fazla bile bu konuları araştırırsan rahatlıkla istediğin sonuca ulaşacaksın.