NOT: Birkaç gün önce Stack Overflow sordum ama çok az görüş vardı ve hiçbir yanıt yoktu. Bunun yerine gamdev.stackexchange üzerinde sormalıydım.
Bu, önceden oluşturulmuş içeriği bozmadan, çoklu yayın sonrası güncellemeleri yoluyla bir prosedür oluşturma sisteminin bakımı hakkında genel bir soru / istektir.
Oyunlar için prosedürel içerik oluştururken "Kelebek Etkisi" sorunlarından kaçınmak için bilgi ve teknikler bulmaya çalışıyorum. Tohumlanmış bir rasgele sayı üreteci kullanırken, tekrarlanabilir bir dünya yaratmak için rasgele sayıların tekrar eden bir sırası kullanılabilir. Bazı oyunlar, üretilen dünyayı bir kez oluşturulduktan sonra diske kaydederken, prosedürel üretimin güçlü özelliklerinden biri, bir bölgeyi aynı şekilde birden çok kez yeniden oluşturmak için sayı dizisinin tekrarlanabilirliğine güvenebilmenizdir. sebat. Özel durumumun kısıtlamaları nedeniyle, kalıcılığı en aza indirmeliyim ve mümkün olduğunca tamamen tohumlanmış konsantrasyona güvenmem gerekiyor.
Bu yaklaşımdaki temel tehlike, prosedürel üretim sistemindeki en ufak bir değişikliğin bile tüm dünyayı değiştiren bir kelebek etkisine neden olabilmesidir. Bu, oyuncuların keşfettiği dünyaları yok etmeden oyunu güncellemeyi çok zorlaştırır.
Bu problemden kaçınmak için kullandığım ana teknik, her biri kendi tohumlanmış rastgele sayı üretecine sahip olan birden fazla fazda prosedürel nesil tasarlamaktır. Bu, her alt sistemin kendi içinde bulunduğu anlamına gelir ve bir şey kırılırsa dünyadaki her şeyi etkilemez. Ancak bu, oyunun yalıtılmış bir parçası olsa bile, hala "kırılma" için çok fazla potansiyele sahip gibi görünüyor.
Bu sorunla başa çıkmanın bir diğer olası yolu, jeneratörlerinizin tam sürümlerini kod içinde tutmak ve belirli bir dünya örneği için doğru jeneratörü kullanmaya devam etmek olabilir. Bu benim için bir bakım kabusu gibi görünüyor ve bunu gerçekten yapan olup olmadığını merak ediyorum.
Bu yüzden sorum, özellikle yayın sonrası oyun güncellemeleri bağlamında, kelebek etkisi sorunuyla başa çıkmak için genel tavsiye, teknikler ve tasarım desenleri için bir talep. (Umarım bu çok geniş bir soru değildir.)
Her ne kadar bu bir dil agnostik soru olmasına rağmen, Unity3D / C # çalışıyorum.
GÜNCELLEME:
Cevaplar için teşekkürler.
Statik verilerin en iyi ve en güvenli yaklaşım olduğu ve giderek daha fazla statik veri depolamanın bir seçenek olmadığı gibi, üretilen bir dünyada uzun bir kampanyaya sahip olmanın, kullanılan jeneratörlerin sıkı bir versiyonunu gerektireceği gibi görünüyor. Benim durumumdaki sınırlamanın nedeni, mobil tabanlı bir bulut kaydetme / senkronizasyon gereksinimidir. Benim çözümüm, önemli şeyler hakkında az miktarda kompakt veri depolamanın yollarını bulmak olabilir.
Stormwind'in "Kafesler" kavramını işler hakkında düşünmenin özellikle faydalı bir yolu olarak görüyorum. Bir kafes temel olarak küçük değişikliklerin yan etkilerini, yani kelebeğin kafasını önleyen bir yeniden besleme noktasıdır.