Tanhu

Unreal MVP
22 Tem 2015
208
34
0
Belirtilmemiş
İnternette farklı birkaç kaynağa baktım ama olayı tam olarak anlayamadım. Bir save load sistemi oluşturdum, her şeyi kaydettim. Etrafta hasar verdiğim objelerin de yok olmaları halinde yükleme işleminde yok olmuş olmalarını istiyorum. Nasıl bir şey yapmam gerekli bunun için?

Bunu şu şekilde soruyorum,

- Kayıt dosyasında ne tür değişkenler oluşuturulacak?
- Yok edilecek objelerde nasıl veriler tutulacak?
- Nasıl bir sistemle genel olarak başarıyla haritadaki itemlerin yok edilmesi sağlanacak?


Aklıma canı biten eşyayı çok uzak bir koordinata gönderip koordinatı kaydetmek geliyor. Eğer böyle bir şey yaparsam, bolca da item olduğunu farz edersek, bu oyunda performans sorununa yol açar mı? Yoksa render alınmazsa bir performans sorununa sebep olmaz mı? 

Ya da çok daha dolaylı olarak, yüklenme halinde eşyalar belli bir koordinata gönderilip o koordinat içine dahil edilenlerin yok edilmesi sağlanabilir ama son saydıklarım çok dolaylı. Doğrudan itemin yokluğunu nasıl kaydedebiliriz bu daha iyi olur sanırım.
 
Objelerin spawn sistemini değiştirmeniz gerekli öncelikle.

Map editor'den eklediğiniz objeler normalde map'in yüklenmesiyle birlikte otomatik olarak spawn olurlar. Bu yüzden level blueprint içerisinde Begin Play'e o tipteki class için "Get All Actors of Class" çağrısı yapıp istemediklerinizi destroy etmeniz gerekiyor. Bu şekilde istediğiniz objeleri spawn edip, istemediklerinizi etmeme şansına sahipsiniz.

Save dosyanızın içerisine string array'i oluşturup, spawn olmasını istediğiniz bu objelerin level editor üzerindeki isimlerini bu array içerisinde tutabilirsiniz.

Tüm bu yapıyı kurduktan sonra artık tek yapmanız gereken, az önce bahsettiğim "Get All Actors of Class" çağrısından sonra her bir loop'ta ele aldığınız objenin adı save game array'inde var mı yok mu kontrol etmek. Varsa objede bir değişiklik yapmazsınız, yoksa destroy edersiniz.

İhtiyaca göre başka yollarla da yapabilirsiniz bunu, mesela en başta bütün o class tipindeki objeleri destroy edip, istediklerinizi "Spawn Actor from Class" ile spawn edebilirsiniz.

Objenin yok edildiğini kaydetme olayını da bu yapı üzerinde gerçekleştirme işini de halledersiniz gibime geliyor :D Level blueprint içerisinde yine bir string array'i oluşturup son save'den beri yok edilmiş objelerin isimlerini tutabilirsiniz(Bunun için obje blueprint'i içerisine bir destroy event'i oluşturup dispatcher ile level blueprint'i içinde her yok edilen obje için bu event'i çağırmanız gerekiyor. Destroy event'i içerisine de level blueprint ile bir referans bağlantısı kurup string array'ine obje adının geçmesini sağlayabilirsiniz). Save yaptığınızda ise bu array'in içeriğini unique olarak save blueprint'i içindeki array'e aktarıp, level blueprint'tekini boşaltabilirsiniz.

Sonuç olarak çok sağlam bir altyapı kurmanız gerekiyor büyük çaplı ve değişikliklere ayak uydurabilen bir kayıt sistemi kurmak istiyorsanız :)
 
Cevapladığınız için teşekkürler ama bilgi eksikliğimden ötürü anlattıklarınızı tam anlamıyla uygulamaya dökemiyorum. Görselle desteklemeniz mümkün mü?