mrtcnaslnts

Aktif üye
8 Ara 2019
611
2
44
28
Örnekler üzerinden anlatacağım.
Şimdi benim haritamda 5 tane ev var ve her evde de 5 tane kapı var diyelim ve bu kapılar kilit ile açılacak. Her açılan kapı için bir değişken belirleyeceğim ve kapı açıldığında true olarak set edilecek. Ama bu kapıların değişkenlerini mesela game mode veya game instance gibi yerlerde saklasam olur mu?. Ve structure oluşturup içerisinde bir "Kilitli mi?" gibi değişken oluşturup sonrasında bir data table oluşturup bu data table içerisine her kapıyı temsilen 5 tane row oluştursam? Mesela 1. kapı açılınca 1. Rowdaki temsili değişkeni true döndürsem vs vs. ve bunları da game mode ya da g.instance içerisinde tutsam. Sanırım anladınız. Aslında düzenli bi şekilde ve tek biyerde değişkenleri bir arada tutmak ve kapıları listelemek amacım. Ve save etmem gerektiği zaman da tek bir sistem üzerinden save işlemini yapmak istiyorum. Kapı Actorlerinde değişken çöplüğü olmasını pek istemiyorum kısacası. Bu konuda ne önerirsiniz acaba nasıl bir sistem yapmalıyım. 5 ayrı ev olduğu için her evi de ayrı ayrı kategorize edip ona göre değişkenleri gruplandırmam lazım bu arada. Data table ve Structure daha önce kullanmadım. Sadece istediğimi bunlarla yapabilir miyim merak ediyorum ya da daha düzenli bir sistem öneriniz varsa güzel olur.
 
DataTable daha çok developer içindir. Ama senin asıl amacın bir runtime veriyi tutmak. Bir örnkele açıklayayım.
Bir silahın skeletal meshi, bağlanacağı socketi, oynatacağı atış animasyonu, göndereceği kurşun tipi, yaralama oranı gibi verileri içeren bir DataTable yapabilirsin. Tüm bunlar runtime da dönen bilgi değildir. Oyun başında ya da gerektiğinde yüklenir sonrasında çok ta kullanılmaz. Ama runtime bilgi dediğim ise farklıdır, Silahın kaç mermi ateşlediği, şu anda kaç mermimiz, kaç şarjörümüz kaldığı, kalan can miktarımız gibi bilgiler runtime bilgidir. Senin kapı olayı daha çok runtime da kullanılacak bir olay. DataTable a gerek yok.
Muhtemelen sadece BP kullandığın için basitçe iki boyutlu array yapma imkanın yok. Ben olsam her eve bir isim ve her kapısına bir ID verirdim. Sonra bir BP struct oluştururdum. Bu Struct ın bir array ını GameState te tutardım. Bu bana çok yönlü istediğim zaman değiştirebileceğim bir yapı sağlardı. Yani kısaca Array olarak şöyle bir struct GameState te kullanırdım:
2024-07-25_23-07-16.PNG
Not: Aslında ben C++ ta yapardım ve data version falan kullanırdım. Yani tam böyle yapmazdım ama böyle anlatması ve anlaması kolay diye bu yöntemi öneriyorum.
 
  • Beğen
Tepkiler: mrtcnaslnts
DataTable daha çok developer içindir. Ama senin asıl amacın bir runtime veriyi tutmak. Bir örnkele açıklayayım.
Bir silahın skeletal meshi, bağlanacağı socketi, oynatacağı atış animasyonu, göndereceği kurşun tipi, yaralama oranı gibi verileri içeren bir DataTable yapabilirsin. Tüm bunlar runtime da dönen bilgi değildir. Oyun başında ya da gerektiğinde yüklenir sonrasında çok ta kullanılmaz. Ama runtime bilgi dediğim ise farklıdır, Silahın kaç mermi ateşlediği, şu anda kaç mermimiz, kaç şarjörümüz kaldığı, kalan can miktarımız gibi bilgiler runtime bilgidir. Senin kapı olayı daha çok runtime da kullanılacak bir olay. DataTable a gerek yok.
Muhtemelen sadece BP kullandığın için basitçe iki boyutlu array yapma imkanın yok. Ben olsam her eve bir isim ve her kapısına bir ID verirdim. Sonra bir BP struct oluştururdum. Bu Struct ın bir array ını GameState te tutardım. Bu bana çok yönlü istediğim zaman değiştirebileceğim bir yapı sağlardı. Yani kısaca Array olarak şöyle bir struct GameState te kullanırdım:
Ekli dosyayı görüntüle 379
Not: Aslında ben C++ ta yapardım ve data version falan kullanırdım. Yani tam böyle yapmazdım ama böyle anlatması ve anlaması kolay diye bu yöntemi öneriyorum.
Bu DataTable denilen olay aslında GTA Fivem sunucusu kuranların kullandığı bir yöntem değil midir ? Mesela adam sunucu kuruyor ve hemen datatableye giriyor oraya bir meyve ekliyor fotoğrafını portakal yapıyor, getireceği can değerini 100 yapıyor ve fiyatı 100 dolar yapıyor.

Fakat bunlar önceden kodlanmıştır. O sadece veri tiplerini seçip miktarları ayarlıyor böylece aslında portakal yokken portakal eklemiş oluyor. Mantıken bunu yapmaya yarıyor değil mi ? Ya da PVP bir metin2 sunucusu kurarken yine DataTablede kendine ait bir item ekliyor ve onun özelliklerini belirliyor. Yani bu sistem developerler için kolaylık sağlayan, üçüncü kişilerin oyuna katkıda bulunabileceği bir sistem yaratmayı sağlıyor.

Ama bunu kullanmasakta yukarıda arkadaşın anlattığı sistemi yapabilirdik değil mi ? Mapler aracılığı ile mesela. Çünkü ben hiçbir zaman DataTable kullandığımı hatırlamıyorum.
 
Yok o senin dediğin başka datatable. Sen backend çilerin veri tabanı dediğimiz data table larından bahsediyorsun. MSSQL, MySQL ya da Oracle vb. gibi. Bizim burda bahsettiğimiz Unreal Engine içerisindeki DataTable ve/veya DataAsset ler:
Bu arada bir konuyu kaçırmışım. DataAsset ya da DataTable kullanabilmek için C++ kullanmak gerekiyor diye biliyorum. BP de kullanılabiliyorlarsa da benim nasıl yapıldığını bilmiyorum. Bilen varsa aydınlatsın.
Bizim projemizde 300 den fazla DataAsset vardır muhtemelen. Çok faydalıdır.
2024-07-27_00-14-50.PNG
 
Hocam data table ile data asset arasındaki farkı anlamadım. Birbirleri ile bağlantılı mı çalışıyorlar ya da bağlantıları var mı?. Data assetin faydalı olduğunu söyledin. Nasıl bir fayda ve nelerde nerelerde kullanabiliriz onu.
 
Yok o senin dediğin başka datatable. Sen backend çilerin veri tabanı dediğimiz data table larından bahsediyorsun. MSSQL, MySQL ya da Oracle vb. gibi. Bizim burda bahsettiğimiz Unreal Engine içerisindeki DataTable ve/veya DataAsset ler:
Bu arada bir konuyu kaçırmışım. DataAsset ya da DataTable kullanabilmek için C++ kullanmak gerekiyor diye biliyorum. BP de kullanılabiliyorlarsa da benim nasıl yapıldığını bilmiyorum. Bilen varsa aydınlatsın.
Bizim projemizde 300 den fazla DataAsset vardır muhtemelen. Çok faydalıdır.
Ekli dosyayı görüntüle 382
DataTable Blueprint ile kullanılabiliyor. Textin bir kısmını renkli yazmak için kullanmıştım.

Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.

Burada kullanımı mevcut.
 
DataTable Blueprint ile kullanılabiliyor. Textin bir kısmını renkli yazmak için kullanmıştım.

Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.

Burada kullanımı mevcut.
BP de kullanabilmek derken demek istediğim bu değildi. Kendi ihtiyaçlarına göre DataTable yapabilmekten bahsediyorum. Yoksa UE içinde tabii ki herşey BP de kullanabilmek için yapılıyor zaten. Burda olay RichTextStyleRow adındaki yapı C++ ta önceden bu iş için hazırlanmış zaten. Onu kullanabilirsin sıkıntı yok. Ancak konuda bahsedilen Kapı kilit olayı gibi bir sistemi yapamazsın. Onun için kendi özgün data structure ını C++ ta yapıp aynı o RichTextStyleRow listesinde görebilmen lazım. Bu sırf BP ile mümkün değil demek istedim. Ya da ben bilmiyorum şu an.
 
DataAsset de blueprint ile oluşturup kullanılabilir. Yapılması gereken Primary Data Asset sınıfı oluşturup, ondan DataAsset asset üretmek.
 
Hocam data table ile data asset arasındaki farkı anlamadım. Birbirleri ile bağlantılı mı çalışıyorlar ya da bağlantıları var mı?. Data assetin faydalı olduğunu söyledin. Nasıl bir fayda ve nelerde nerelerde kullanabiliriz onu.
İkisi bağlantılı demeyelim ama aynı alt yapının farklı amaçlar için oluşturulmuş farklı versiyonları diyelim. DataTable ı eğer bilihyorsan Excel Sheet gibi düşünebilirsin. Yani her satırı bir seri bilgi kümesi olarak düşün. Not çizelgemiz gibi etc. Ana amaç veri çizelgesi tutmak. Bir yaratığın HPsi, XPsi, defense i, attack, damage vb. sayılar değerlerini tutmak için uygun. Yani oyundaki her yaratığın bir ismi karşısında HPsi XPsi defensi vesaire birer satır olarak bir datatable da tutulabilir. Asıl kuvveti ise şurada bir Excelden ya da CSV dosyasından kolayca veri aktarılabilmesi. Hiç UE bilmeyen bir çocuğuna o CSV dosyasını verip bütün değerleri değiştirmesini isteyebilir bir UE den hiç anlamayan bir Backend çiye server da bir database de kaydetmesini söyleyebilirsin. Onlarda bunu ayrıca bir web sitesine karakter bilgisi şeklinde allayıp pullayıp yayınlayabilirler. vesaire. Tek başına bir developer olarakta tüm yaratıklarının bilgilerini bir tablo üzerinde görebilmek, başka hiç bir asset açmadan tek bir noktadan yönetebilmek, istediğin zaman çıktı alıp kağıt üzerinde çalışabilmek vesaire avantajı olur. Asıl olayı böyle şeyler yani.
Data Asset böyle bir excel sheet değilde onun bir satırını içeriyor gibi düşün. Birden fazla satır için birden fazla data asset e ihtiyacın var. Mesela her yaratığın için ayrı bir dataasset olacak content browser ında. DataAsset lerin maksadı farklı. Yaratıklar örneğinden gidecek olursak eğer, bir dataasset içinde o yaratığın adı, hangi skeletalmesh kullandığı, hangi anim bp kullandığı, hangi socketlerine silah takıldığı, hangi arayüz icon u kullandığı, hangi extra skeletalmesh ler kullandığı eğer varsa ID si vb. oyun içi bilgileri tutmak için yapılmıştır. Burda dikkat edilecek nokta, data assetler datatable da belirtiğin tüm bilgileri de içerebilirler kolaylıkla ve hiç bir sorun çıkmaz. Yani HP, XP, attack, defense vb. şeyleri de DataAsset lerde tutabilirsin. Böylece tüm bilgi aynı yerde olmuş olur. Eğer CSV,Excel vb. özelliklere ihtiyacın olmuyorsa, ve tüm bilgileri aynı tabloda görmek çok ta önemli değilse data asset le tüm olayı bitirebilirsin yani. Eğer birden fazka kişi aynı projede çalışıyorsanız, farklı yaratıklar üzerinde çalışıyor olsanızda hepsi aynı DataTable da listeliyse aynı anda bir DataTable da çalışamazsınız. Önce biriniz kendi yaratığını modifiye etmek, sonra diğer arkadaşınız istediği yaratığı modifiye etmek zorunda kalır. DataAsset le yaptıysanız hepsi ayrı asset olduğundan bunu yapabilirsiniz. Aynı anda farklı yaratıkları modifiye edebilirsiniz.
DataTable da da skm ve anim bp vb oyun içi assetler belirtilebilir ancak ana maksadı bu değildir. Etkin olmaz ve sorunlar çıkar.
Yukarda saydığım sebepler yüzünden DataAssetler daha çok kullanılıyor benim gördüğüm.
Ana fayda şu diyebilirim. Her şey derli toplu. 25 çeşit yaratığın varsa, hepsi content browser altında bir folder da dataasset olarak duruyorlar. Yeni bir yaratık eklemek istediğinde hiç bir yeri açıp atamalar yapmak zorunda değilsin. Yeni bir data asset i yaratıyorsun ya da copyala yapıştır ile çoğaltıyorsun, sonra ilgili alanları istediğin gibi dolduruyorsun. Oyunun play düğmesine basıyorsun. Oyun sistemin düzgün kurulu ise başka hiç bir yere gitmek hiç bir şeyi atamak zorunda değilsin. Bir yaratık eklemek bir data asset doldurmak kadar kolay. Oyuna direk giriyorsun, yaratığını oyunda karşında görüyorsun. Şu BP ye de bu socket ismini koymam lazımdı, bir de gamemode da belirtmem gerekirdi vb. Dertler yok. 10 yaşında ki çocuğuna yeni bir karakter eklemeyi öğretebilirsin artık. Bir data asseti açtığında hangi bilginin eksik olduğunu direk görebilirsin. Mesela oyunda bir silah düzgün bağlanmamışsa mesela, hemen dataasset i açıyorsun bakıyorsun oraya socket alanını doldurmamışsın, düzeltiyorsun geçiyorsun. Ya da animasyon çalışmıyorsa açıyorsun data asseti , bakıyorsun abp koymamışsın. Koyuyorsun geçiyorsun. vesaire vesaire.
 
Son düzenleme:
  • Beğen
Tepkiler: mrtcnaslnts
Onu da C++ yaratmıyor muyuz :unsure:? Onu BP de yapmanın bir yolu varmı? Yani sonuçta C++ kullanmak zorunda kalıyorsun sonuçta.
Yok abi aktör oluşturur gibi primary data asset classı oluşturuyorsun. Ardından variable ekliyorsun c++ taki gibi. Daha sonra da data asset oluştururken base seçilen yerden o blueprint class'ını seçebiliyorsun. Hiç c++ gerekmiyor.
 
Bizim millet her zaman bir yol buluyor. Daha önce düşünmemiştim :). Evet bu bir yol olarak kullanılabilir. PrimaryDataAsset aslında bir DataAssetin dinamik olarak referans verilip, yüklenip silinebilmesine olanak sağlamak, DLC leri mümkün kılmak için yapılmış özel bir versiyonudur. Editor de bir BP formatında açılabildiği için ona değişken ekleyebilir ve bundan da yeni bir DataAsset türetirseniz C++ kullanmadan DataAsset kullanmış olursunuz. Amacı dışında kullanmış olursunuz ama kullanabilirsiniz. Sağda solda bir problem çıkar mı bilmiyorum.
 
Örnekler üzerinden anlatacağım.
Şimdi benim haritamda 5 tane ev var ve her evde de 5 tane kapı var diyelim ve bu kapılar kilit ile açılacak. Her açılan kapı için bir değişken belirleyeceğim ve kapı açıldığında true olarak set edilecek. Ama bu kapıların değişkenlerini mesela game mode veya game instance gibi yerlerde saklasam olur mu?. Ve structure oluşturup içerisinde bir "Kilitli mi?" gibi değişken oluşturup sonrasında bir data table oluşturup bu data table içerisine her kapıyı temsilen 5 tane row oluştursam? Mesela 1. kapı açılınca 1. Rowdaki temsili değişkeni true döndürsem vs vs. ve bunları da game mode ya da g.instance içerisinde tutsam. Sanırım anladınız. Aslında düzenli bi şekilde ve tek biyerde değişkenleri bir arada tutmak ve kapıları listelemek amacım. Ve save etmem gerektiği zaman da tek bir sistem üzerinden save işlemini yapmak istiyorum. Kapı Actorlerinde değişken çöplüğü olmasını pek istemiyorum kısacası. Bu konuda ne önerirsiniz acaba nasıl bir sistem yapmalıyım. 5 ayrı ev olduğu için her evi de ayrı ayrı kategorize edip ona göre değişkenleri gruplandırmam lazım bu arada. Data table ve Structure daha önce kullanmadım. Sadece istediğimi bunlarla yapabilir miyim merak ediyorum ya da daha düzenli bir sistem öneriniz varsa güzel olur.
1722140848929.png

Yapmak istediğin şey bu değil mi ? Structerlar a kapı ekleyip değerini değiştirdiğinde bunu map şeklinde yaparsan 1.kapı = True 2.kapı= false gibi bir şey yapabiliyorsun onu da DataTable de görebiliyorsun. Oluşturduğun Strucuter i DataTable den seçmen lazım eğer bundan bahsetmiyorsan. DataAsset oluşturmak kalıyor geriye. Eminin dediği gibi yeni bir Blueprint Classı oluşturup oradan PrimaryDataAsset seçip daha sonra DataAsset oluşturup ilk oluşturduğun PrimaryDataAsset'i seçmen lazım.
DataTable Blueprint içerisinden nasıl yönetilir bilmiyorum. Ama Structerleri değiştirip kapıları kilitleyebilirsin.
 
Ekli dosyayı görüntüle 387

Yapmak istediğin şey bu değil mi ? Structerlar a kapı ekleyip değerini değiştirdiğinde bunu map şeklinde yaparsan 1.kapı = True 2.kapı= false gibi bir şey yapabiliyorsun onu da DataTable de görebiliyorsun. Oluşturduğun Strucuter i DataTable den seçmen lazım eğer bundan bahsetmiyorsan. DataAsset oluşturmak kalıyor geriye. Eminin dediği gibi yeni bir Blueprint Classı oluşturup oradan PrimaryDataAsset seçip daha sonra DataAsset oluşturup ilk oluşturduğun PrimaryDataAsset'i seçmen lazım.
DataTable Blueprint içerisinden nasıl yönetilir bilmiyorum. Ama Structerleri değiştirip kapıları kilitleyebilirsin.

Demek istediğim şuydu. Aslında EvStrctr değişkenini game mode ya da instance vs içerisinde saklamayı düşünüyordum. Ve ilgili kapı yani 1 olabilir 2 olabilir 3 olabilir. Kapıya göre gerekli değişken true döncek ve veriler Game mode içerisinde saklamak. Buraya kadar yapmıştım aslında. Ama burda Data table ne işe yarıyor onu oturtamamıştım kafamda yani bp içerisinde structure verisinden sadece 1 den 5 e kadar değişkenleri çekebiliyorum. Datayı değişken şeklinde BP içerisinde oluşturup da rowları ve rowlara göre değişken numaralarını da çekebilsem editleyebilsem işim hallolcaktı. Ama datadaki rowlara nasıl erişcem onu çözememiştim. İlk defa deniyorum zaten bu data table olayını. Data asset oluşturma vs kısmını denicem nasıl yapcam bilmiyorum tabi ama uğraşcam bakalım.

resim.jpg
 

Ekli dosyalar

  • resim2.jpg
    resim2.jpg
    89.9 KB · Görüntüleme: 2
  • Resim3.jpg
    Resim3.jpg
    413.8 KB · Görüntüleme: 2
Siz bunu demek istiyorsunuz anladığım kadarıyla
Evet onu diyor zaten. DataAssete falan gerek yok ki bunu yapmak için. Map oluştursa çözülecek durum. Structeri Map şeklinde yapması lazım. 1.evin 1.kapısı = true 1.evin 2.kapısı= false 2.evin 3.kapısı= true
gibi bir mantık olacak. Bunları da GameSaveRef ile aynı şekilde bir map olarak kaydedebilir . Bitti gitti. DataTable ve DataAsset ile bu mantığın hiçbir alakası yok.
Birden fazla farklı kapı varsa DataAsset yapılabilir. Mesela Kapı rengi, Kapı resmi, Kapı açılma kapanma yönü , Kapı sesi gibi. Her bir kapıdan yeni asset türetilir. Ama bu tip bilgileri kod içerisinde kullanma değiştirme için uygun olacağını sanmıyorum DataAssetlerin. DataTable ise sadece bir görsel üzerinde oynama yapılıyor mu bilmiyorum. CSV aktarımında falan işe yarıyor.
 
  • Beğen
Tepkiler: mrtcnaslnts