Tanhu

Unreal MVP
22 Tem 2015
208
34
0
Belirtilmemiş
Merhabalar.

Sorunu olabildiğince açık ifade etmeye çalışacağım.

Elimde item datalarini tutan bir struct variable var, bu bp slotlara item bilgilerini (görseli, adı, kaynağı vb.) gönderiyor. Ben bu degiskeni kaydedebiliyor, yükleyebiliyorum. Bunu sıradan bir can değerini kaydetmek gibi yapıyorum tek fark array olması.

Ancak benim sorunum şu. Aynı item datalarini çeken variable, parent class sayılan sandık için de karakter için de geçerli. Ben ornek olarak bu degiskeni karaktere cagirdigimda burada karaktere ait olanı kaydedebilirken sandığı da sandık bpsi içerisinde kaydetmek gerekiyor. Bu da ayrı save dosyalarına sebep oluyor. Çok daha kötüsü de, ben farklı sandıkları haritaya koyduğumda bu sandiklarin her biri aynı kaydedilmesin ya da aynı yüklenmesin diye kayit stringini self yapıyorum, haritadaki her sandık kendi adıyla ayrı bir save dosyası oluşturuyor. (Sandık.sav,sandik1.sav..)

Yapmayı planladığım oyun doğası gereği dünyasında bolca sandık bulunduracak, eğer bunu yaparsam hem çok fazla sav dosyası oluşacak, hem de bu saveleri silme işlemi, yükleme işlemi saçma sapan blueprintlerle baya kirlenmeye ve uzamaya sebep olacak.

Benim istediğim şey, karakter olsun sandıklar olsun, envanter kodunun parent classlari olan bu unsurlar, tek bir item data kaydıyla ayırt edilebilir bir biçimde kaydedilebilsin ve yuklenebilsin. Yoksa selfi string yazdırıp hileye başvurmak bence biraz tehlikeli bir iş.

İşte benim bu noktada kullanmam gereken kaydetme metodu tam olarak nedir bilmiyorum. Oyun esnasında oyunu mouse kontrolune aldığında ve karaktere tıkladığında, Envanter basligi altında item data bilgileri ve içindekiler gözüküyor, sandıkta da ayrı gözüküyor. Bunlar hiyelarsideki isimleri altında tıpkı aktif oyun esnasında orada aynı olmadan durmayi başardıkları gibi her biri kendini tek bir dosyaya kaydedebilmeli, bana bunu anlatabilirsiniz çok memnun olurum. Sanırım şu ana kadar carptigim en sert kaya bu oluyor.
 
Sandıkların içeriğini tutabilecek bir A arrayi oluşturun, bu array sandık bp'sinin içerisinde dursun save dosyası yerine.
Bu A arraylerini tutabilecek ayrı bir B array'i oluşturun, bu array'de save dosyası içerisinde dursun.

Save işlemi yapacağınız zaman save dosyasının içerisindeki B array'ine A arraylerini unique şekilde doldurun. Yalnız her save sonrası sandık array'i değişebileceği için unique olarak ekleme olayını kendiniz ayarlamanız gerekli(aksi takdirde aynı sandığa ait birden çok veri kalabilir B arrayi içinde). Misal sandık array'inin ilk index'ine her sandık için özel olan bir unique değer koyabilirsiniz, böylece B arrayi içerisinde hangi veri hangi sandığa ait bilebilirsiniz.

Save/Load ederken bütün sandıklara ulaşabilmek içinse Get All Actors Of Class kullanmanız gerekecektir büyük ihtimalle.
 
Şöyle bir anlayamadığım kısım var. Görsellerle anlatırsam daha anlaşılır olabilirim sanırım.

9LZbPk.png

Item slots, slotların içerisinde bilgileri tutuyor. Yani envanter içerisindeki bilgi tam olarak burada. Ben boş bir sandığa eşya attığımda, eşyalara göre Item Slots arrayi içerisinde item bilgileri oluşmakta.

Çok basit bir biçimde aynı türden bir struct variable ile bir kayıt oluşturabiliyorum, bu eğer isimler aynıysa bilgiyi oraya yolluyor.

Kafamı kurcalayan şey, iki arrayin nasıl iç içe gelebileceği çünkü anlayabildiğim kadarıyla yapmam gereken şey bu.


Item Slots arrayi, örnek olarak "Sandık Array"'i içerisinde (Item Slots 1 , Item Slots 2) şeklinde oluşabilmeli ve bu oluşanlar da bir array olmalı. Array içinde array yani.

Bunu yapabilirsem yanlış anlamadıysam, arrayin indexlerini alarak da konteynırlara gönderebilmiş olacağım.

Sanırım gerçekten kafam karıştı.