Ekran dışı AI işlemek için iyi bir yol?


16

Örneğin aşkına:

  • Diyelim ki dünyada 10 oda var.
  • Diyelim ki dünyada 10 kişi yaşıyor.
  • Ve her varlığın kendi "günlük rutini" vardır, burada odada belirli eylemler gerçekleştirir ve odalar arasında gezinebilir.

Oyuncunun bir seferde sadece bir odada olabileceği düşünüldüğünde, diğer varlıkların diğer odalarda ekran dışında gerçekleştirdiği eylemleri izlemenin iyi bir yolu nedir?

  1. En basit seçenek, her karedeki 10 birimden her birini kontrol etmek, konumlarını / durumlarını kontrol etmek ve varlığın oyuncunun herhangi bir zamanda bulunduğu odada olup olmayacağını belirlemektir. (Ancak bu, özellikle oda / varlık miktarı arttıkça gerçekten kaynak ağır geliyor.)
  2. Başka bir seçenek, oyunun başlangıcından bu yana geçen süreyi takip etmektir, daha sonra her bir varlık, modelinin oyuncunun bulunduğu odayla kesişip kesişmediğini kontrol eder ve eğer varlığın bu belirli zamanda aynı odada olması gerekir, kalıpları oyuncunun bulunduğu odayla kesişmeyen varlıklar, oyuncu kalıplarının kesiştiği bir odaya girene kadar hiçbir şey yapmaz ve sadece o noktada hesaplanıp hesaplanmayacağını hesaplar render etmeleri gerekir. (Ama oda ile etkileşime girerse, o zaman o zamandaki konumlarını belirlemek için rotalarını kesen odaların durumunu kontrol etmek zorunda kalacaklar, ki bu o kadar da büyük değil.)

  3. Geldiğim üçüncü seçenek, her şeyden önce sadece oyuncu konumuyla kesişen rotalara (daha önce açıklandığı gibi) bakmak, ikincisi bir odaya girdikten sonra, oyuncunun o odada olup olmadığını kontrol etmek, eğer değilse odanın durumu ve bir sonraki odaya geçilmesi ne kadar sürer. Örneğin, bir hademe NPC odaya girer, odanın durumunu kontrol eder, oyuncu tarafından yapılan bir dökülme olduğunu görür, temizlemenin ne kadar zaman alacağını ve yolun ne kadar süreceğini vb. Hesaplar. Bir sonraki odaya girme zamanı geldiğinde, sadece oyuncunun odada olup olmadığını kontrol ederiz. NPC'nin oluşturma amaçları için tam yeri sadece oyuncu odaya girdiğinde hesaplanır.

Bir süre beyin fırtınasından sonra üçüncü seçeneğe geldim, ama belki de böyle şeyleri işlemenin bilinen veya daha iyi bir yolu olup olmadığını merak ediyordum?


1
Bu soru bir hatırlatıyor dev-blog ben Projesi Zomboid adlı bir oyun için okuyun.
Sumurai8

Yanıtlar:


12

Çok basit bir yaklaşım "AI Ayrıntı Düzeyi" kullanmaktır. Kabaca bu, AI'yi oynatıcıya / kameraya daha yakın bir şekilde güncellediğiniz anlamına gelir. Daha uzaktaki AI hesaplamalarının karmaşıklığını da azaltabilirsiniz, özellikle. yol bulmak için. Sonuçta, oyuncu karakteri iyi göremiyorsa veya hiç göremiyorsa, karakteri en yüksek doğrulukta simüle etmek için tonlarca çaba sarf etmenin bir anlamı yoktur.

Örneğin, oynatıcının bulunduğu oda en yüksek doğruluğa sahip olabilir (AI her kareyi günceller, tam çözünürlük). Bitişik odalar bir sonraki en yüksek doğruluğu (her 10 kenede bir güncelleme, yol yumuşatma ve animasyonları kaldırmak) alabilirsiniz. Diğer tüm odalar en düşük doğruluğu elde edebilir (saniyede bir güncelleme, düşük çözünürlüklü yol bulma, gerekli olmayan NPC-NPC etkileşimlerini ortadan kaldırma).

Daha büyük ve daha karmaşık oyunlar benzer yaklaşımları kullanabilir (ve kullanmıştır). Savaş hesaplamalarını basitleştirebilirler, hareket etmeleri gerektiğinde onları yol bulmak yerine karakterleri ışınlarlar.

Oyununuz her şeyi her zaman bellekte tutamayacak kadar büyükse, iyi bir çözüm, o zamanki güncelleme süresini odanın kaydedilmiş verilerine depolamak ve simülasyonunu (en düşük çözünürlükte) tekrar oynatmaktır. geri yüklendi.

Yapay zekanın yüklü olmayan "uykuda" alanlardan "canlı" alanlara bir programda geçmesini bekliyorsanız, bu bölgelerin her zaman bellekte kalması için ya çok düşük kaliteli veriler oluşturmak istersiniz (ör. ayrıntılı ayrıntı düzeyi ve anahtar nesne / karakter konumları) veya nadiren güncellemelerle bellekte ve simülasyonda X "uykuda" alanlarındaki bu alanları periyodik olarak döngüye almak ve daha sonra bunları " uykuda ", anahtar etkin NPC'leri olan alanları, alanları boşaltın ve yükleyin.


1

O oda örneğindeki bir odada bulunan varlıkları depolardım, oda nesnesi hangi varlıkların ne zaman güncellenmesi gerektiğini de izlerdi (örn. Başka bir odaya seyahat et veya o odada bir şey değiştir vb.). Ve ayrıca her saniye bir (veya daha fazla) oda (belki başka bir iş parçacığında) güncelleme.

Bir odayı güncellediğinizde, NPC pozisyonları güncellenmeli ve son güncellemeden bu yana odayla etkileşime giren tüm eylemler de ele alınmalı, son olarak bir sonraki gerekli güncellemenin zamanı kontrol edilmeli / güncellenmelidir.

Bir varlık bir odadan diğerine seyahat ederse, örneği diğer odada depolanmalı ve işletmenin bir sonraki güncellemesi de güncellenmelidir.

Bu şekilde sadece mevcut odayı ve o anda planlanmış bir güncellemeye sahip odaları güncellemek zorunda kalırsınız, diğer odaları güncellemek sadece isteğe bağlıdır (ancak oyuncu her hareket ettiğinde veya bir şey yaptığında güncellenen bir AI'nız varsa önerilir) .

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.