Sorunun KarakterBPden kaynaklandığını düşünüyorum. Boş bir haritaya karakter spawn ettiğimizde aldığımız fps düşüyor. KarakterBP'de ne yazık ki C++ kullanmıyorum, kodların tamamı blueprint. Nasıl bir optimizasyon yapabilirim?
FPS düşüren şey genelde şu oluyor. KarakterBP içerisinde milyon tane kod yazdıysan. Construction Scripti çok doluysa veya Karaktere önceden daha sahneye sürüklenirken birçok obje attach edildiyse.
Mesela el feneri, tabanca, objektif eşyaları, melee eşyası gibi bir çok şey.
Bunları sonradan attach etmek lazım. Ya da event begin play de socket lokasyonu verilerek attach edilmesi gereken şeyler.
Öncesinde edilince sahneye sürüklerken FPS düşer.
Tick fazla kullanılmamalı.
Mesela karaktere silah attach ettin ve kodunu karakterbp içine yazdın. Bu yanlış. Silahın fonksiyonları silahın kendi içinde olmalı ve o silah ise BP olmalı. PistolBP gibi.
El fenerinin ışık fonksiyonları kendi içerisinde olmalı FlashlightBP olmalı. Bunları ya oyun başlangıcında attach ettirirsin. Ya da oyunun ilerleyişinde pickup şeklinde alınınca attach olur. Her objektifin kodları da kendi içinde çalışır.
Böylece kod ve iş yükü kontrol yükü kalkar. Ticki durduk yere her şeyde kullanmamalısın. Tetikleyiciler sayesinde aktif etmelisin ve işlem bitince yok etmelisin.
Birden fazla iş yapılacaksa araya 0.1 sn gibi delaylar konulmalı. Ticklerin süresi geciktirilmeli.
Milyon tane değişken kullanılmamalı.
Mesela : IsRunning, IsCrouching, IsInjured, IsFlying gibi şeyler yerine Enum(enumeration) kullanılmalı.
Mesela E_MovementState, E_CurrentWeapon gibi listelenmiş enumlar kullanılmalı. Böylece Timer ile Booleanları kontrol etmekten de kurtulursun.
Bir üst seviye bir şey istersen toplu değişkenler için Structures kullanılabilir. Karakterin can değeri, koşma hızı, adı, resmi, durumu, gibi şeyleri bulundurursun. Envanter için de ayrı bir structures kullanabilirsin.
Bazı şeyleri karakter içinde değil de Component şeklinde yapmalısın. Mesela envanter yapacaksın diyelim yani bir çanta gibi düşün. Sırtına takılı olduğu anda aktif olacak gibi.
BP_Inventory gibi bir şey yapıp attachlanmış karakterde interaksiyona girmesini sağlayabilirsin. Karakterin paneline bunu eklersin. Dolayısıyla o da kendi içinde veri tutacaktır.
Veri yükün kendi karakterinden envantere aktarılacak. Çünkü o değişkenler o envanterde tutuluyor olacak. Alınan nesne sayısı, nesnenin türü, resmi bilmem neyi gibi şeyler orada olacak sen sadece onu panelden çekip veri transferinde bulunacaksın. Araca NOS takmak gibi bir şey bu. Böyle eklentili ComponentBP ler mevcut.
Karaktere eklediğin sürece çalışır sadece.
Bir de BlueprintInterfaces denilen bir olay var. Bunu da kullanırsan optimizasyon sorunu %90 ortadan kalkacaktır.
Bir de görsel optimizasyon var. Mesela HairGroom sıkıntı çıkarabilir. Metahuman gibi çok detaylı karakterler de sıkıntı çıkarır. Bunlara ise LOD yapmak lazım.
Benim oyunda da aniden lapss diye fps düşüren şey
PlayerCharacterBP
Daha sahneye sürüklerken fps cortluyor. İçinde 50 değişken var 30 graph var ve her graphta bir çok kontrol ve kod var.
Tickler ve Contruction Scriptler var. Ayrıca karaktere Attachlanmış 20 obje var.
Dört oyuncu bağlandığında fps de yoğun düşüş oluyor. Bunlar NPC bile olsa aynı şekilde oluyor. Bu yüzden sistemi komple değiştiricem.
Genelde her şeyi CharacterBP içinde yaptım.