leonscottkfm

Unreal MVP
31 May 2015
1,536
5
218
63
28
(34) İstanbul Avrupa
store.steampowered.com
Evet bilgili arkadaşları içeri davet ediyorum. Benim bilgi burada bitti gibi. Fakat ben açıklama yapınca siz anlayacaksınız.
Gerek uygulamalar gerek bazı oyunlar olsun arkada çalışan servisler barındırırlar.
Örneğin GTA gibi bir oyun düşünelim FIVEM mesela. Arkada banksystem var. Bu banksystem fiziksel bir şey değil. Fakat bir banka servisi arkada çalışıyor. Ya da mülk edinme sistemi gibi sistemler. Fakat bunlar doğrudan haritada script olarak çalışmıyor.
Mesela Unrealde mülk sistemi yapmak istesek bir BP kodlayıp haritaya mı atmalıyız? Mülk sistemim fiziksel olmak zorunda değil. PropertySystem diye bir şey kodlayıp bunu arkada çalıştıramaz mıyız?
Chat GPT nin söylediğine göre bunlara subsystem deniyormuş. GameInstanceye bağlı olarak çalışan alt Instanceler olarak geçiyormuş. Fakat ben böyle bir şeye ulaşamadım motor içerisinde.
Mesela meslek sistemi yapacağız diyelim. Property System , Bank System vs uzar gider. Tüm bu sistemler için BP ler kodlayıp haritaya mı atmak gerekiyor?
Bu sistemi PlayerPawnda yapamazsın. PlayerController de yapılmaz, PlayerState de yapılmaz, GameModede de yapılmaz. Nerede yapacağız? Bunlar farklı farklı modular sistemler çünkü servis olarak çalışmaları gerekiyor.
Tek bir GameInstanceye de bu kadar şey yığamayız. Farklı levellerde de çalışmaları gerekebilir. Örneğin oyuncu farklı bir moda farklı haritada giriş yapar fakat bank system o an devam etmek zorunda.

Dediğim şeyi tam anlatamamış olabilirim. Fakat anlarsınız diye düşünüyorum.
Mesela gün/zaman döngüsü de bir subsystemdir. Böyle global sistemler var. Fakat bunlar ne sıradan haritaya atılan BP ne de başka yerlere yazılabiliyor.

Mesela elimde banksystem_BP bulunacak fakat bu haritada olmayacak global çalışacak. Oyuncunun parasına sürekli faiz ekleyecek mesela örnek veriyorum. Oyuncu hangi atm objesinden erişirse erişsin bu servisle iletişim kurabilecek. Fakat bu servis asla bir dünyada bulunan bp olmayacak.
Yani dışarıdan external bir bp ile işlem yapılacak.
GameInstance gibi düşünebiliriz bunu. GameInstance dünyada yok oyun boyunca çalışan bir şey. Harita değişse bile veri tutar. BankSystemi de GameInstanceden türetilmiş alt dal gibi bir servis içerisinde bulunmalı. Bunu nasıl yaparız? Yani o bir actör olmayacak. Arkada çalışan bir servis olacak.

Mesela en basitinden bir vergi kuralı yazacağız diyelim. Tüm ürünlerin vergi çarpanı subsystemdeki vergi miktarına göre ayarlanıyor. Fakat bunu ayarlayan sistem haritada bulunan bir aktör değil. Dolayısıyla ben o çarpanı artırdıgımda şak diye her şeyin fiyatı fırlayacak.
Manager yani aslında. Kural belirleyici sistem.

Tüm araçların yenilenme olayı denilen bir şey yapalım mesela. Her araç 10 dakikada bir spawn noktasına geri dönsün ve sıfırlansın. Yol ortasında bırakılan araç park yerinde yeniden spawn olsun diyelim. Bu kod nereye yazılır? Hiçbir yere. Gamemodeye yazsan ben modu değiştirmek isteyebilirim. Oyuncuyla alakası olmadığından PC ya da playerstateye de yazılamaz. GameInstanceye yazsak mantılı olur fakat o da çok şişer. Oyun ayarları vs bir ton şeyi oraya mı yazacağız?

Subsystem lazım işte böyle şeyler için. Mesela GameInstanceden türetilmiş bir alt sınıf subsystem içine yazsak. Desek ki arkada 5 dakika say sonra tüm araçlara mesaj gönder. Tüm araçlara yenilenmesi gerektiğini iletir ve hepsi kendini yeniler. Fakat işte bunu nerede yapacağız? Bu tip sistemler için BP yazıp haritaya mı atacağız hepsini? Saçmalıktan ibaret olurdu. Sistem bunlar çünkü bir aktör değiller. Başka haritaya geçtiğimde ne olacak? Oraya da mı atacağız tek tek.
Olayın Plugin yazmak ile alakası yok bu arada. O bambaşka bir olay.

Böyle bir sistem de hata verme riski de çok düşüyor. Subsystem olursa. Tak çıkar gibi bir şeye dönüşüyor. Varsa çalışır yoksa çalışmaz.
Ben araştırdım C++ için GameInstanceSubsystem diye bir şey var. Main Game Instancene alt küme olan GameInstanceler bağlıyorsun subsystem şeklinde. Init oluyorlar ve ona göre aksiyon alınıyor. Fakat BP için böyle bir şey bulamadım.

Mesela oyun içi hile izleme sistemi yapmaya çalışsak bu da bir subsystem. Haritada bulunan bir aktör olamaz böyle bir şey. GameModede de bulunamaz çünkü oyun modu değişebilir. GameInstancede bulunabilir. Tüm oyun boyu izler ana menüde bile işlem uygulanabilir mesela oyuna girmesi engellenebilir. Makine banlanır GameInstancede makine okunabilir.
Ya çok önerilmez ama örnek veriyorum işte. Global merkezi sistemlerde BP yapıp haritaya atmakla iş çözülmüyor. Sürekli servis gibi arkada çalışan sistemler yapmak için bir çözüm arıyorum sadece.

Örnek vermek gerekirse : Faction/Wanted Level hesaplama/Reputation ve clanlar gibi şeyler.
Böyle şeyler GameState de barınabilir aslında. Fakat yine de olayın local kısımları var.
 
Son düzenleme:
Evet bilgili arkadaşları içeri davet ediyorum. Benim bilgi burada bitti gibi. Fakat ben açıklama yapınca siz anlayacaksınız.
Gerek uygulamalar gerek bazı oyunlar olsun arkada çalışan servisler barındırırlar.
Örneğin GTA gibi bir oyun düşünelim FIVEM mesela. Arkada banksystem var. Bu banksystem fiziksel bir şey değil. Fakat bir banka servisi arkada çalışıyor. Ya da mülk edinme sistemi gibi sistemler. Fakat bunlar doğrudan haritada script olarak çalışmıyor.
Mesela Unrealde mülk sistemi yapmak istesek bir BP kodlayıp haritaya mı atmalıyız? Mülk sistemim fiziksel olmak zorunda değil. PropertySystem diye bir şey kodlayıp bunu arkada çalıştıramaz mıyız?
Chat GPT nin söylediğine göre bunlara subsystem deniyormuş. GameInstanceye bağlı olarak çalışan alt Instanceler olarak geçiyormuş. Fakat ben böyle bir şeye ulaşamadım motor içerisinde.
Mesela meslek sistemi yapacağız diyelim. Property System , Bank System vs uzar gider. Tüm bu sistemler için BP ler kodlayıp haritaya mı atmak gerekiyor?
Bu sistemi PlayerPawnda yapamazsın. PlayerController de yapılmaz, PlayerState de yapılmaz, GameModede de yapılmaz. Nerede yapacağız? Bunlar farklı farklı modular sistemler çünkü servis olarak çalışmaları gerekiyor.
Tek bir GameInstanceye de bu kadar şey yığamayız. Farklı levellerde de çalışmaları gerekebilir. Örneğin oyuncu farklı bir moda farklı haritada giriş yapar fakat bank system o an devam etmek zorunda.

Dediğim şeyi tam anlatamamış olabilirim. Fakat anlarsınız diye düşünüyorum.
Mesela gün/zaman döngüsü de bir subsystemdir. Böyle global sistemler var. Fakat bunlar ne sıradan haritaya atılan BP ne de başka yerlere yazılabiliyor.

Mesela elimde banksystem_BP bulunacak fakat bu haritada olmayacak global çalışacak. Oyuncunun parasına sürekli faiz ekleyecek mesela örnek veriyorum. Oyuncu hangi atm objesinden erişirse erişsin bu servisle iletişim kurabilecek. Fakat bu servis asla bir dünyada bulunan bp olmayacak.
Yani dışarıdan external bir bp ile işlem yapılacak.
GameInstance gibi düşünebiliriz bunu. GameInstance dünyada yok oyun boyunca çalışan bir şey. Harita değişse bile veri tutar. BankSystemi de GameInstanceden türetilmiş alt dal gibi bir servis içerisinde bulunmalı. Bunu nasıl yaparız? Yani o bir actör olmayacak. Arkada çalışan bir servis olacak.

Mesela en basitinden bir vergi kuralı yazacağız diyelim. Tüm ürünlerin vergi çarpanı subsystemdeki vergi miktarına göre ayarlanıyor. Fakat bunu ayarlayan sistem haritada bulunan bir aktör değil. Dolayısıyla ben o çarpanı artırdıgımda şak diye her şeyin fiyatı fırlayacak.
Manager yani aslında. Kural belirleyici sistem.

Tüm araçların yenilenme olayı denilen bir şey yapalım mesela. Her araç 10 dakikada bir spawn noktasına geri dönsün ve sıfırlansın. Yol ortasında bırakılan araç park yerinde yeniden spawn olsun diyelim. Bu kod nereye yazılır? Hiçbir yere. Gamemodeye yazsan ben modu değiştirmek isteyebilirim. Oyuncuyla alakası olmadığından PC ya da playerstateye de yazılamaz. GameInstanceye yazsak mantılı olur fakat o da çok şişer. Oyun ayarları vs bir ton şeyi oraya mı yazacağız?

Subsystem lazım işte böyle şeyler için. Mesela GameInstanceden türetilmiş bir alt sınıf subsystem içine yazsak. Desek ki arkada 5 dakika say sonra tüm araçlara mesaj gönder. Tüm araçlara yenilenmesi gerektiğini iletir ve hepsi kendini yeniler. Fakat işte bunu nerede yapacağız? Bu tip sistemler için BP yazıp haritaya mı atacağız hepsini? Saçmalıktan ibaret olurdu. Sistem bunlar çünkü bir aktör değiller. Başka haritaya geçtiğimde ne olacak? Oraya da mı atacağız tek tek.
Olayın Plugin yazmak ile alakası yok bu arada. O bambaşka bir olay.

Böyle bir sistem de hata verme riski de çok düşüyor. Subsystem olursa. Tak çıkar gibi bir şeye dönüşüyor. Varsa çalışır yoksa çalışmaz.
Ben araştırdım C++ için GameInstanceSubsystem diye bir şey var. Main Game Instancene alt küme olan GameInstanceler bağlıyorsun subsystem şeklinde. Init oluyorlar ve ona göre aksiyon alınıyor. Fakat BP için böyle bir şey bulamadım.

Mesela oyun içi hile izleme sistemi yapmaya çalışsak bu da bir subsystem. Haritada bulunan bir aktör olamaz böyle bir şey. GameModede de bulunamaz çünkü oyun modu değişebilir. GameInstancede bulunabilir. Tüm oyun boyu izler ana menüde bile işlem uygulanabilir mesela oyuna girmesi engellenebilir. Makine banlanır GameInstancede makine okunabilir.
Ya çok önerilmez ama örnek veriyorum işte. Global merkezi sistemlerde BP yapıp haritaya atmakla iş çözülmüyor. Sürekli servis gibi arkada çalışan sistemler yapmak için bir çözüm arıyorum sadece.

Örnek vermek gerekirse : Faction/Wanted Level hesaplama/Reputation ve clanlar gibi şeyler.
Böyle şeyler GameState de barınabilir aslında. Fakat yine de olayın local kısımları var.
"mülk edinme sistemi gibi sistemler"

Bunların çoğunluğu büyük şirketlerin oyun servisleri veya bulut cozumu veya AAA sirketlerin devasa veritabani cozumleri ile çalışıyor.

Amazon Cozumleri:

Oracle Cozumleri:


Yani bilgileri oradan alıp kaydedebilirsin.

Basit olarak şöyle oluyor

Kullanıcı Sisteme Giris Yapti -> Server Uzerinden Bir Protokol Istegi Yolladi (Mesela JSON HTTP Request) -> Server Ona Bir Mesaj Gonderdi -> Kullanici Bu Bilgileri decode etti ve oyun dunyasindaki dedicated server bu bilgileri diger kullanicilara replicate etti.

GameInstance bir singleton sinfi yani, kendisi oyun calistirildiginda local olarak baslatiliyor ve ornegini(instance) butun her yerde bulabilirsiniz. Bunun subsystem ile alakasi yok.

Ufak maliyet hesabi:

En ucuz cozum:
Bence MySQL ile yapilan veritabani islemleri, etkili, ucuz ve maliyetsiz. Buyuk ve harika calisan cloud serverlara veya API ihtiyac yok.

Orta Seviye Cozum:
Custom Cloud + Node JS Server + Maria DB
veya
Amazon Game Services

Pahali Cozum:
Oracle game services ile anlasirdim SunSystems bu isin mukemmeliyet seviyesinde bir abidesi.
 
Son düzenleme:
  • Beğen
Tepkiler: leonscottkfm
Leveller arası geçiş yaparken datayı korumak istediğin herşey için Subsystem oluşturabilirsin, untickable her yerden ulaşabildiğin bir alternatif sunar sana (game settings, local player data, ses sistemi...) Online için sorarsan durum farklı tabii, kısaca cloud server üzerinde tutulması gerekiyor malum.
Yine kısaca mülk sistemi üzerinden konuşursak, basit çözüm: Bir adet DataAsset (çok ucuzdur, tick üzerinden bilgiyi çekmediğin sürece cast edip gerekli bilgileri istediğin gibi alırsın). Oyunun ilk başlagıcında bu data asset i, Subsystem a Set edersin oyun boyunca oradan gerekli static bilgiyi alır. Oynanış boyunca tüm değişiklikleri sub iletip save edebilirsin. Online iletişim içinse save değil de get/set server connection kullanırsın.

BP ile kullanılırmı hiç bilmiyordum şimdi senin için denedim ama üzgünüm, maalesef sadece cpp de çalışıyor. BP de alternatifin GameInstance ın kendisi bu durumda, hem local hem online trafiği sağlayabilir.
 
  • Beğen
Tepkiler: leonscottkfm
Leveller arası geçiş yaparken datayı korumak istediğin herşey için Subsystem oluşturabilirsin, untickable her yerden ulaşabildiğin bir alternatif sunar sana (game settings, local player data, ses sistemi...) Online için sorarsan durum farklı tabii, kısaca cloud server üzerinde tutulması gerekiyor malum.
Yine kısaca mülk sistemi üzerinden konuşursak, basit çözüm: Bir adet DataAsset (çok ucuzdur, tick üzerinden bilgiyi çekmediğin sürece cast edip gerekli bilgileri istediğin gibi alırsın). Oyunun ilk başlagıcında bu data asset i, Subsystem a Set edersin oyun boyunca oradan gerekli static bilgiyi alır. Oynanış boyunca tüm değişiklikleri sub iletip save edebilirsin. Online iletişim içinse save değil de get/set server connection kullanırsın.

BP ile kullanılırmı hiç bilmiyordum şimdi senin için denedim ama üzgünüm, maalesef sadece cpp de çalışıyor. BP de alternatifin GameInstance ın kendisi bu durumda, hem local hem online trafiği sağlayabilir.
Doğru söylüyorsun fakat GameInstance şişer bu şekilde işte.
GameInstanceye benzer sistemler lazım bence. Tak çıkar SubSystemleri. Oyun boyunca veri taşıyacak sistemler. Ama dediğin şey ise sadece CPP de bulunuyor. Bu büyük bir eksiklik bence. Çünkü kimse propertysystem için sahneye ActorBP atmak istemez. Arka planda çalışan servis sistemi lazım. Ama Blueprint için böyle bir şey yok sanırsam.
Sunucu gerekli değil aslında. Session sistemi de Dedicated gibi çalışabilir. Mesela sunucunun localine savegameye oyuncuların bilgilerini kaydedebilirsin. Eğer port açtıysa UDP TCP belli ise sabit IP var ise Pc açık kaldığı sürece sunucu da açık kalacaktır. Ayrıca SteamSubsytem var ise TCP UDP olayına da gerek yok. PC açık kaldığı sürece sunucu açıktır ve Savegame o pcye ait bir veritabanı gibi çalışabilir.

Oyuncu oyuna girdiği an kendi bilgilerini o savegameden çekebilir. TMap sistemi ile yapılır bu da . (Oyuncu bilgisi,Oyuncu_Struct)
Struct içerisinde ise oyuncunun ev bilgileri, araç bilgileri, can durumu, aktif statları bulunur. Bu mapı direkt kendi mapı ile eşitler.

Runtimede ise oyunun kodları oyuncudaki mapın olaylarını kontrol eder ve yine Savegameye yazabilir.
Yani pek önerilmez fakat neden olmasın olabilir bence. Sadece oyuncu sayısı çok fazlaysa sürekli save yapmak sistemi yorabilir belki ama çok yoracağını da sanmıyorum. Zaten oyuncu ilk girdiğinde Load yapacak. Oyunda olduğu sürece load yapmasına gerek yok çünkü tüm map bilgisini kendine çekecek. Yani işlemler kendi PlayState içerisindeki map üzerinden dönecek. Sadece bir işlem yaptığında mesela yeni bir ev aldığında, PlayerState içerisindeki map içerisindeki Struct arrayına o ev eklenecek ve o sırada Save alınacak. Map kopyalanacak ve Sunucu bilgisayarındaki Map ile eşitlenecek. Aslında çok büyük bir işlem değil böylece local bilgisayar ile Full çalışan Dedicated gibi bir şey yapılabilir.

Zaten full çalışan dedicated yapsak bu işlem yine sorun çıkarabilir. Dedicated demek kurucunun oyunda olmaması demek. Makine arka planda sunucuda oluyor. Aslında tek fark bu bir de güçlü işlemci ve ram sunuyor ekran kartına gerek kalmıyor. Ama yine Cloud ve database sistemine ihtiyaç duyuyorsun iki sistemde de. Bunun çözümü ise Savegame dosyası.

Önceden Samp diye bir oyun vardı bilir misiniz? San Andraes Multiplayer. Orada sistem local MYSQL ile çalışırdı evden sunucu kurardın. Her şey oraya kayıt olurdu. İsteyen gidip MYSQL sunuculu bir şeye para öder orada tutabilirdi verileri.

Ayrıca ARK survival evolved benim dediğim sistem gibi çalışıyor. Evden session kuruyorsun arkadaşın o sessiona giriyor ve tüm bilgiler locale kaydoluyor. Çıkıp tekrar girerseniz her şey olduğu gibi geri geliyordu. Ama ne database ne başka bir şey vardı. SaveGame bu kayıt işlerini çözebilir. Sonradan bir oyuncu girdiğinde verilerini senin bilgisayarından yükleyebilir. Böylece sunucu güvenliği sağlanır. Aslına kendi bilgisayarına da kaydettirebilirsin fakat oyunu silerse tüm her şeyi gidecektir. Ya da elle değiştirebilir ve hile çıkar ortaya. Bu yüzden herkes kendi bilgisini de sunucu olacak kişinin localindeki savegameden almalı. SteamCloud kullanılabilir ama böyle işlemler için uygun değil. Ana para bilgisi falan varsa olabilir. Bilemiyorm birden fazla yöntem var. Fakat Subsystem gibi anlık çalışan ve farklı maplerde bile veri depolayan bir alt yapı sistemi BP de mevcut değil şu anda. Servis sistemi gibi bir şey yok.

GameState level değişince sıfırlanıyor sonuçta.
Gamemode sadece server tabanlı ve o da sıfırlanıyor
PlayerState ilgili player bazlı çalışan bir şey ve bir süre sonra sıfırlanıyor.
Player Pawn ve Player Controller tamamen alakasız ve sıfırlanan şeyler.

Bir tek GameInstance kaldı. Ama ona da böyle çok fazla servis girersen şişer gibi duruyor. Tak çıkar Subsystem çalışır mı bilgim yok. EV sistem, Meslek sistemi, Ekonomi sistemi gibi şeyler yaptığını düşün mesela. Oyunda ülke kurdun diyelim hayali bir ülke. Ve bu ülkede ekonomi olayı var. Ülkenin belli bir miktar parası oluyor diyelim. Çeşitli meslek grupları var diyelim. Ayrıca ev sahiplenme ve araç sahipliği konusu var diyelim. Birileri bir şeyleri sahiplenebiliyor yani. Fakat bu sistemler oyunun neresinde duracak? Actor_BP olarak sahneye sürüklemek saçmalık. Arka plan servisleri bunlar çünkü. Unrealde veritabanı gibi bir şey de yok ayrıca. DataTable var ama bu bir veritabanı değil. Runtimede hangi objelerin hangi özelliklere sahip olacağını belirlediğimiz bir özellikler tablosu. Veri aktarımı için kullanılıyor veri saklamak için değil.

Yani burada iki problem var birisi arka planda subsystem olarak çalışan servisler ve kalıcı veri saklama özelliği. İkincisi dediğim gibi Savegame olayı ile çözülebilir bir şey. Fakat İlkinin çözümü yok. Tek GameInstanceyi şişereceksin. Farklı graphlar ve sistemler gireceksin içine. Ana oyun yürütmesi ile ek servisler karışacak böylecek.

Property System bir Subsystemdir,
Bank System bir Subsystemdir
Rent Car , araba alış satış bir Subsystemdir bence.
Ayrıca Mesleklerin olduğu ve meslek seçiminin yapılması bir Subsystemdir. Bunlar bir actor değildir ve bir yere yazılamaz. Bunlar sistemlerdir. Meslek_BP yazıp sahneye atmak tamamen saçmalıktan ibarettir. Hava durumu bile Actor değildir aslında o da Subsystemdir bence.

Böyle oyunun geneline etki edip genelini yöneten kurallar bütünü bence Subsystemler ile yapılır. Adı üstünde Meslek Sistemi, meslek aktörü değil. Bu yüzden haklısınız fakat BP de bunun karşılığı yok. Sadece GameInstance var o da sıkıntı. Çünkü tüm sistemleri bunun içine yazacaksınız. Oysa ki her sistem kendisi bir Subsystem olmalı.

Property_Subsystem
Job_Subsystem
Vehicle_Subsystem
Bank_Subsystem
Economy_Subsystem
Weather_Subsystem

Ve bunlar tak çıkar şeklinde çalışmalı aynı Componentler gibi. Olmasa bile hata vermemeli. Veri yolunu bunlar sağlamalı. Actorler ile iletişime girmeliler.
Örneğin Home_BaseBP gidip E tıkladığınızda eğer bu evin bir sahipliği yok ise, "Kirala,Satın Al" seçenekleri sunmalı size. Eğer ev satın alındıysa "Enter the Home, Sell" Seçeneği.
Bu seçenekleri size verir ve bu ev PropertySysteminde kayıtlıdır. Sizin seçeceğiniz değişikliker ise bu subsystemi doğrudan etkiler.

Bunun için daha basit bir çözüm bulunmuş :D GameStateye yapacağın sistemi ActorComponent olarak ekliyorsun. GameState zaten herkes için replicated ve bu component subsystem gibi orada yaşıyor. İşler daha da basitleşiyor.
 
Son düzenleme:
Subsystem base CPP de oluşturulup sonrasında BP'de child oluşturularak geliştirilebiliyor.

Şişme mevzusuna çok takılma bence "hard reference" kullanmazsın - "data oriented" gidersin vs. olur biter.
Kaygını anlıyorum ama şişecek diye mimariden kaçınmak bence daha büyük problem :) Ki burada kaçındığın şey aslında veriden ibaret.

Örneğin eklediğim resimler TowerDefense'daki SavingSubsystem için bizzat yıllar önce yaptığım bi projeye ait. DataAsset kullanımı da çok önemli tabii Subsystem kullanımı sırasında.
En çok sevdiğim kısım ise son resimde gördüğün gibi direkt sağ tıkla çağırıp;

-> Ne actor oluşturup sahneye atıyorum
-> Ne cast ediyorum
-> Ne de exec pinine bi şey bağlıyoum

bunlara gerek kalmadan kullanıyorum.


1791122396312.png1791122563881.png


1791122688329.png1791122622325.png

1791123128210.png
 
  • Beğen
Tepkiler: leonscottkfm
Subsystem base CPP de oluşturulup sonrasında BP'de child oluşturularak geliştirilebiliyor.

Şişme mevzusuna çok takılma bence "hard reference" kullanmazsın - "data oriented" gidersin vs. olur biter.
Kaygını anlıyorum ama şişecek diye mimariden kaçınmak bence daha büyük problem :) Ki burada kaçındığın şey aslında veriden ibaret.

Örneğin eklediğim resimler TowerDefense'daki SavingSubsystem için bizzat yıllar önce yaptığım bi projeye ait. DataAsset kullanımı da çok önemli tabii Subsystem kullanımı sırasında.
En çok sevdiğim kısım ise son resimde gördüğün gibi direkt sağ tıkla çağırıp;

-> Ne actor oluşturup sahneye atıyorum
-> Ne cast ediyorum
-> Ne de exec pinine bi şey bağlıyoum

bunlara gerek kalmadan kullanıyorum.


Ekli dosyayı görüntüle 858Ekli dosyayı görüntüle 859


Ekli dosyayı görüntüle 861Ekli dosyayı görüntüle 860

Ekli dosyayı görüntüle 862

Harika ama bende bir huy var BP projeme en ufak bir C++ verisi taşımak istemiyorum :D Yani Eklentiler dışında bir şey taşımam ki eklenti kullanmaya da karşıyımdır. Oyun multiplayer ise Subsystemler de işi oldukça uzatabiliyor Replicate kısmında.
Kullanılabilir evet senin yöntem güzel. Multiplayerde biraz çileye döner.
GameState içine ActorComponentler eklemek çok daha iyi ve Replicated.
 
  • Beğen
Tepkiler: emin2045