Geçen hafta Unity3D ile bir envanter sistemi üzerinde çalışıyordum. İlk başta Design3'teki adamlardan yardım aldım ama yolu ayırıncaya kadar çok uzun değildi, çünkü kodlarını yapma şeklini gerçekten sevmedim, OOP kokusu yoktu.
Daha ileri adımlar attım - öğeler birden fazla yuva, gelişmiş yerleşim sistemi (öğeler en iyi uyumu bulmak için ellerinden geleni yapıyor), yerel fare sistemi (fare aktif torba alanında sıkışıyor) vb.
İşte işimin bir demosu .
Oyunumuzda olmasını istediğimiz şey, otomatik sıralama değil, otomatik düzenleme özelliğidir. Bu özelliği istiyoruz çünkü envanterimiz 'gerçek zamanlı' olacak - oyunu duraklatacağınız ve envanterinizde bir şeyler yapacağınız Resident Evil 1,2,3 vb. Şimdi kendinizi zombilerle çevrili yapışkan bir durumda hayal edin ve mermileriniz yok, etrafınıza bakın, yakınlarda yerde mermiler olduğunu görüyorsunuz, bu yüzden onlar için gidip onları almaya çalışıyorsunuz, ama onlar yok uygun değil! envanterinize bakın ve bazı öğeleri yeniden düzenlerseniz, uygun olacağını öğrenin! - şimdi oyuncu - bu durumda yeniden düzenlemek için zaman yok çünkü zombilerle çevrili ve durmak ve envanteri yer açmak için organize ederse ölecek (gerçek zamanlı envanteri hatırlayın, duraklama yok) - t Otomatik olarak gerçekleşmesi iyi olur mu? - Evet!
(Bunun Dungeon kuşatması veya başka bir oyunda uygulandığına inanıyorum, bu yüzden yapılabilir)
bu resme bir göz atın örneğin:
Evet, sorunu otomatik olarak sıralarsanız alanlarınızı alırsınız, ancak kötüdür, çünkü: 1- Pahalı: Bu alanları boşaltmak için bir çeşit işleme gerek yoktur, ilk resimde kırmızı öğeyi en solda, otomatik sıralamadan aldığınız boşlukların aynısını elde edersiniz. 2- Oyuncu için can sıkıcı: "F, eşyalarımı yeniden sipariş etmenizi kim söyledi?"
Bunun için "nasıl kod yazmak" için sormuyorum, ben sadece bazı rehberlik, nereye bakmak, hangi algoritmalar dahil soruyorum? Bu, grafikler ve en kısa yollarla ilgili bir şey mi? Umarım kolej çalışmalarına devam etmeyi başaramadım: / Ama öyle olsa bile, sadece söyle bana ve ilgili şeyleri öğreneceğim.
Birden fazla çözüm olabileceğine dikkat edin. Sanırım ilk yapmam gereken durumun 'çözülebilir' olup olmadığını anlamak - bir durumun çözülebilir olup olmadığını nasıl belirleyeceğimi bilirsem, o zaman 'çözebilirim'. Sadece 'çözülebilir' kılan koşulları bilmem gerekiyor. Ve bunun için bir algoritma / veri yapısı olması gerektiğine inanıyorum.
Bir 1x3 öğeyi sığdırmaya çalışmanın birden fazla çözümü için bir resim:
Oklar çözümlerden sadece birini gösterir, ancak bakarsanız birden fazla bulacaksınız. Nihayetinde otomatik sıralama yapmıyorum ama bir çözüm bulup uyguluyorum.
Üzerinde zaman geçirirsem, bunu çözmenin bir yolunu bulacağım, ama en iyi yol bu olmayacak, eliniz yerine ayaklarınızla bir araba tekerleği tutmak gibi! XD Ya da diziler gerektiren bir sorunu çözmeye çalışmak gibi, ama onların varlığının henüz farkında değilsiniz! Peki buna doğru yaklaşım nedir?
Yorumdan Güncellemeler
@Stephen Alogs'ta gerçekten guru değilim, 'sırt çantası' ve @BlueRaja - Danny Pflughoeft bir 2D kutu ambalaj algo'dan bahsettiniz. Bir şekilde ilişkili / aynı mı? - Buna nasıl yaklaşmam gerektiğiyle ilgili hala kafam karıştı.
Ve evet zaten bir "sezgisel" kullanıyorum ama gerçekten olduğumu bilmiyordum: D mevcut ilk yuvayı bulur ve öğenin oraya uyup uymadığına bakın.
Örneğin 2x2 ve 1x4 öğeleri var, çünkü onlar aynı hacimli, ancak farklı şekiller ve sonraki öğelerin geri kalanı üzerinde nasıl farklı bir etkisi. YANİ... :/
Bu videoyu izledim , tam paketleme fikrini gerçekten beğendim, ancak envanter 2D olduğu için nasıl devam edeceğini merak ediyorum. Burada bin ambalajın anahtar olduğundan bile emin değilim, çünkü birden fazla çantaya sahip olabileceğim doğru, ama oyunumuzda sadece bir çanta olacak. Bu yüzden, öğeleri 'bir' torbaya yerleştirmek meselesi ve bundan daha fazlası değil. Yani bu vid'deki örnekler (borular ve otobüsler) benim sorunumla gerçekten uyuşmuyor. Ayrıca bu sırt çantası şey hakkında bazı şeyler izledim, 'değer' öğeler / envanter ile nasıl ilişkili olduğunu görmedim, ama sanırım 'ağırlık' toplulık ile aynı, emin değilim.