Bir oyunda “koku izlerini” nasıl modelleyebilirsiniz?


11

Bir 3D oyun oluşturmak istediğinizi ve oyuncuların ya da cep telefonlarının koku izlerini takip ederek diğer varlıkları takip edebildiğinizi varsayalım. Bu kullanım örneğiyle eşleşen bilinen herhangi bir veri yapısı var mı?

Eğer sadece birkaç kişiniz varsa, muhtemelen varlık kimliğine 3D koordinat haritası gibi bir şey yapabilirsiniz, ancak gerçek koku farklı çalışır, çünkü zamanla kaybolur, ancak yavaşça. Ve çoğu zaman, sadece oraya ne kadar gittiğini ve o tipte kaç şeyin oraya gittiğini bilirsiniz. Ve yaklaşım, gidene kadar zamanla daha da kötüleşir.

Tam bir sayı ile başlamak ve en önemli rakamı kaybedene kadar en az önemli basamakları yavaş yavaş kaybetmek gibi bir şey olduğunu düşünüyorum. Ancak bu bana gerçekten yardımcı olmaz, çünkü varlık kimlikleri, bireysel kimliğinin yanı sıra varlık türünü içerecek şekilde normal olarak kodlanmamıştır.


Cüce Kalesi bir sonraki sürümde böyle bir şey yapıyor.
Russell

Yanıtlar:


10

Bunu nasıl yapabileceğiniz konusunda çok çeşitli var; “Benim için açık” seçimler önereceğim, ancak tasarlanabilecek birçok varyasyon var. Feragatname: Aslında böyle bir şey uygulamamıştım.

İlk olarak, dünyanızı kapsayan bir veri yapısına ihtiyacınız var. Bir 3D alanda NPC hareketi yapıyorsanız, muhtemelen yol bulma amacıyla böyle bir yapıya sahipsiniz - ya da sonunda ihtiyacınız olacak - örneğin bir gezinme ağına. Diyelim ki buna kokular için bir alan ekleyebiliriz.

Peki, bu alana ne koyarız? Bir kayıt listesi öneriyorum ( koku , güç , zaman ). Bu liste maksimum uzunlukta veya altında tutulur ve dayanıklılığa göre sıralanır - böylece zayıf kokular atılır. Koku açıkça her varlık veya varlık türü için tanımlanmış ya bir şey olabilir, ya da sadece varlık türü olabilir - Eğer belirgin izlemek mümkün istediğinize bağlı. Zaman bu koku rekor son güncelleme ne zaman bir zaman damgası olduğunu.

Bir varlık bir alandan geçtiğinde (ör. Gezinme ağının belirli bir üçgeni), koku listesini güncelleme zamanı. İlk olarak, zamana göre zaman değerine göre geçen zaman miktarına göre tüm güçlü yönleri azaltın - üstel bozulma muhtemelen makul bir seçimdir. Ardından, belki de varlık türüne bağlı bir güçle, geçerli varlığın kokusunu listeye ekleyin. Liste çok uzunsa, en düşük gücü atın.

Bir izleme sonucu elde etmek için, geçerli konumun listesindeki kokuyu bulun, ardından tüm komşuları için aynısını yapın ve en güçlü koku yönüne gidin (izleyicinin geldiği yön bu değildir).

Ekstra gerçekçilik için:

  • Difüzyon: periyodik olarak her bölgedeki kokunun bir kısmını komşularına aktarın. Bu, rotaları karıştırır, ancak aynı zamanda sabit şeylerin koklanabileceği anlamına gelir (yiyecek, ölü bedenler vb. Bulma). (Eylemleri tamamen bu tür bilgilere dayandırmak için tanınan bir AI türü - manzara, belirli bir kaynağı elde etmek için hangi yoldan gidileceği hakkında bilgi sağlar, vb. Adını unuttum.) Ana dezavantaj, harcanan zamandır her yerde difüzyonun hesaplanması.

  • Güçlü kokular zayıf kokuların algılanmasını önlemelidir; aranan kokunun gücünü en güçlü kokunun gücüne bölün ve çok küçükse başarısız olun. Bu, kişinin koku izini kasten karıştırmasına izin verebilir.


9

Kokular için bir harita oluşturmak için etki eşleme adı verilen bir tekniği değiştirirdim. Doğal olarak dağılır ve kaybolur, diğer kokularla karışır ve yarışır ve muhtemelen daha fazlası. Bu, tam olarak ihtiyacınız olanı yapacak gibi görünüyor, ancak uygulamak istediğinizden daha ayrıntılı olabilir. En azından size bazı iyi fikirler vermeli ve şu anda kullandığınız yapının üstüne uygulamak oldukça basittir.

Bir öğretici / açıklama yararlı buldum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.