leonscottkfm

Unreal MVP
31 May 2015
1,494
5
214
63
28
(34) İstanbul Avrupa
store.steampowered.com
Arkadaşlar zamanında amelelik ederek bir sistem yaptım. Çünkü oyunun bu kadar ilerleyeceğini tahmin edemedim. Alt tarafı bir Flashlight olacak diye bunu Structure bir sistem yerine, boolean ile yaptım.
Yani IsFlashlight? Adında bir değişken var ve bu değişken true ise o an aktif olan eşyamız flashlight oluyor. Fakat bir de işin AIM kısmı var. Flashlı alıyor doğru. Envanterde bulunuyor diye eline gelecek değil sonuçta. Sağ mouse tuşuna basıldığında ise eğer elinde flashlight varsa bu sefer onunla aim alıyor.

Daha sonra bir silah ekleyelim dedik ve bir tabanca ekledik. Bunu da aynı şekilde yapıp bunu da 2 tuşuna basınca aktif ediyoruz. Şimdi silah için üç değişken oldu.

HasPistol? = Silah pickup olarak alınıp envantere geldi mi ? Geldi.
EquipPistol?= Silah envanterdeyse o an aktif olarak seçildi mi ? Yani Equip yapıldı mı ? HasPitol? = True > then EquipPistol?
Şimdi o da var diyelim bu sefer Aim alınıyor mu ona bakılıyor.
Mesela Aim alırken sadece Equip olayına bakılıyor. Çünkü zaten bir şeyin Equip olması için önce ona sahip olunmalı yani çantada bulunmalı.

Bu arada çantadaki eşya Equip modunda ise Visibility ayarı True oluyor eğer değilse ise False oluyor. Equipi değiştirmek için iki şey yapılabilir. Mesela 2 tuşuna basıp pistola geçtim, tekrar basarsam silahı bırakır ve normal no combat moduna geçer. Yani hand modu. Ya da o an equip modu yine silahta diyelim ben 1 tuşuna bastım, silahı bırakır Flashlightı alır. Değişkenler sürekli birbiriyle entegre olacağı için bir ton kod çıktı ortaya.
Daha bir ton ayar var mesela silaha geçince camera lagı ayrı, TPS ise ayrı FPS modu ise ayrı şeyler uygulanıyor. Bu değişkenler kontrol edilirken ayrıca IsDead? gibi şeyler sürekli kontrol ediliyor veya injured modu var oyunda mesela. Yaralıyken hap hariç hiçbir eşya kullanılamıyor. Dolayısıyla IsInjured? Yine devamlı kontrol edilmek zorunda. Hap ise 3 tuşu ile equip olunup eğer Injured moddaysanız E ile direkt kullanıma geçebiliyor.

Yani böylelikle bir performans sorunu çıkıyor. Ayrıca oyuncu hızlı şekilde 1-2-3 gibi şeylere basarsa buga girebiliyor sistem. Mesela o an hem silah hem fener gelebiliyor.
Böyle complex bir sisteme ne önerilir ? Bir de işin içine pusula çıktı. O da direkt C tuşuna basılınca aktif ediliyor cebinden çıkarılıyor. Bu sonradan alınan bir eşya olmadığı için bir pickupu bulunmuyor. Dolayısıyla herhangi bir slotta değil. Ayrıca o an aktif olan equipe göre Widgetta seçilen öğenin ikonu büyüyor ve yeşile dönüyor. Başka bir eşyaya geçince o küçülüyor diğeri büyüyor. Böyle karmaşıklaştı sistem. Şimdi ise buna bir el atmam lazım çünkü daha sırada Pompalı silah ve objektif eşyaları yer alacak. Mesela Melee Combat eklenecek.

Dün ise Lantern ekledim mesela. Elde taşınan fiziksel bir lantern. Ne bileyim böyle bir ton şey eklenebilir. Bu sistemi en iyi nasıl yaparız ? Bu arada son olarak bir bilgi daha vereyim size.
Eşyalar zaten karakterin el slotuna önceden konumlandırılmış, socketler aracılığıyla zaten eklenmiş. Hepsi sıradan birer Mesh. Fakat silah gibi öğelerin skeletal meshi var ve animasyonu mevcut. Yani akıllı bir sistem yok böylelikle yer de kaplamış oluyorlar ayrıca render edildikleri için performans düşüşü de yaratıyorlar. Mesela Flashlightın ışığı önceden spotlight ile eklenmiş. Üzerine tabanca meshi eklenmiş.

Seçim sırasını Switch Enum ile yapmayı düşünüyorum. Fakat öğeleri akıllı şekilde nasıl karaktere ekler ve attach yaparız. Durumları nasıl düzgünce kontrol edebiliriz ? Ayrıca 1-2-3 gibi şeylere rastgele bastığında en son basılan öğenin seçilmesi gibi ince işleri nasıl hallederiz ?

Ve nasıl düzgün bir performans uygularız ? Bu konu hakkında en basit karmaşık olmayan ve hızlıca düzenleyebileceğimiz bir sistemi önerebilecek birisi varsa şimdiden teşekkür ederim.


1740861687107.png

1740861710810.png

Bunlar sadece pistol ve flashlight için yazılmış sistemler. Düzenlemek çok zor olmaz benim için çünkü önceden çok grupladım ve commentledim. Bunlar Event Graphta ayrıca Collapsed sistemler.

1740861759144.png

Ana Event Graph burası. Bu arada bunu kullanın. Eğer kodunuz çok ise açılışta çok fazla performans sorunu yaşarsınız. Fakat her şeyi böyle ayrı ayrı Collapsed yaparsanız ve gruplarsanız hem bulunması kolay olur yani ilgili sisteme kolayca ulaşılır. Hem de %50 performans artışı yaşarsınız. Tabi Farklı Graph bile oluşturabilirsiniz.
Ben burada bir şeyleri nasıl yaparız derken baştan anlatmanıza gerek yok. Ben zaten ileri düzeyde biliyorum fakat benim olayım biraz farklı. Karmaşıklaştı her şey. Sadece mantığını söylemeniz yeterli olacaktır. Zaten bu sistem Replicated bir sistem.
 
yine derdini çözecek olan 1 boolean daha :) bOnProgress, herhangi bir işlem başlattığında bOnProgress false ise true, böylece başka hangi tuşa basılırsa basılsın bool true olduğu için başka işlem başlatılamaz, işlem tamamlandı ise-> bOnProgress tekrar false , ben pluginin ilk versiyonu yaparken sürekli silah değiştirilemesin diye switch weapon animasyonlara AnimNotify eklemiştim, anim sonunda bunu trigger layıp bOnProgress false a geçiriyordum. her zamanki gibi kural 1 oyuncuya asla güven olmaz tüm tuşlara aynı anda bile basar :)
 
  • Beğen
Tepkiler: leonscottkfm
yine derdini çözecek olan 1 boolean daha :) bOnProgress, herhangi bir işlem başlattığında bOnProgress false ise true, böylece başka hangi tuşa basılırsa basılsın bool true olduğu için başka işlem başlatılamaz, işlem tamamlandı ise-> bOnProgress tekrar false , ben pluginin ilk versiyonu yaparken sürekli silah değiştirilemesin diye switch weapon animasyonlara AnimNotify eklemiştim, anim sonunda bunu trigger layıp bOnProgress false a geçiriyordum. her zamanki gibi kural 1 oyuncuya asla güven olmaz tüm tuşlara aynı anda bile basar :)
Ne tür bir plugin geliştiriyorsun hocam ? Evet Notify güze oluyor. Ama sistem yine karmaşık oluyor ve objeler önceden sahneye sürüklenip ayarlandığı için hem görsel hem de performans karmaşası yaratıyor. Tamamen akıllı bir sisteme ihtiyacım var. Yukarıdaki arkadaşın dediği gibi öncelikle objeler bilgileri ile birlikte alınıp karaktere entegre olmalı. Yani her obje birer bp actoru olsa daha iyi olur. Aslında elimde ObjectiveBP diye bir actor var. Bunu sahneye bıraktığımızda bunun silah mı anahtar mı flashlight mı lantern mi olduğunu seçiyoruz ona göre aksiyon alıyor. Bu obje pickup yapıldığında Results kısmı çalışıyor. Switch ile o objenin resultlarına gidiliyor. Örneğin silah alındıysa hemen 10 mermi ekliyor gibi. Ve silah alma sesi çıkması gibi. Yani LineTrace gönderip alma sistemi ve alındıktan sonra da o objective içindeki objektifi switch edip resultuna ulaşma kısmı var. Bunun üzerinden de gidilebilir.

Yine result kısmına objeyi ayırarak işlem uygulayabiliriz. Mesela tabanca alındıysa onu sockete attach edebiliriz. Structera çok gerek yok gibi. Asıl olay o yukarıda anlattığım karmaşa :)
Başta bir şey tanımlamalıyız mesela macro gibi düşünün. Injured ve Death olaylarını sürekli çekecek bir sistem. Ayrıca o an elimizde olan booleanları anlayacak sistem. Mesela Macro gibi bir şey yapacağız ve bu macro içerisinde "isInjured?,IsDead?,UsingCompass?,UsingFlashlight?,UsingPistol?,UsingLantern?" gibi şeyleri öncesinde gireceğiz. Ve pistol alındığında bu macroyu çağıracağız o an pistol macroda aktif edilirse diğerleri deaktif edilip kullanımı otomatik devre dışı kalacak mesela. Eğer bunu yaparsak tek bir node ile tüm karmaşa sonlanır gibi gözüküyor ve art arda böyle 200 tane booleanı sürekli girip kodları da uzatmayız. Ama bu sistem nasıl olur sizce ?
 
Benim plugin i boşver yılan hikayesine döndü araya bir sürü iş girdi update edemedim bende satışını durdurdum, ama en kısa haliyle ve son düşündüğüm versiyonu ile replicated silah sistemi denebilir, aynı anda multiple silah kullanabileceğin şekilde ister uzay gemisinde 100 tane lazer topu çalıştır istersen RTS oyunda kullan kafası birşey ama uzun sürer bitirmem vaktim yok onunla uğraşmaya maalesef. Senin tarafa gelirsek aslında demek istediğim bu boolean karakterde olacak, sonuçta input sistemi karakterde değil mi? karakter birşeyi başlattı dediğin gibi tabanca aldı mesela, animasyonu var mı bilmiyorum ama basit bir delay ile de çözülür, eğildi silahı aldı beline taktı boolean yine false, o süreçte başka tuşa da bassa işlem yapamaz, "isInjured?,IsDead?,UsingCompass?,UsingFlashlight?,UsingPistol?,UsingLantern" şuradaki multi boolean dan kaçınmanın en kolay yolu da Enum, herhangi bir objeden karakterin durum bilgisini de Interface ile yine bu enum üzerinden çözebilirsin, atıyorum dediğin gibi karakter yaralı sadece hap kullanabiliyor ama yerde atıyorum el feneri var, eğer obje karaktere kendini set ediyor ise, interface üzerinden overlap ile karakter durum bilgisini alıp ona göre attach olur veya olmaz. öyle struct veya macro luk bir durum görmüyorum şimdilik enum switch yeterli dediğim gibi ama sen bilirsin tabii nasıl kolayına geliyorsa öyle yürü.
 
  • Beğen
Tepkiler: leonscottkfm