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.