RTS oyunlarında yol bulma nasıl çalışır?


42

[yığın akışından çaprazlanmış]

Warcraft 3 veya Age of Empires gibi bir oyunda, bir AI rakibinin harita üzerinde hareket edebilme yolları neredeyse sınırsız görünüyor. Haritalar çok büyük ve diğer oyuncuların pozisyonları sürekli değişiyor.

Bu gibi oyunlarda AI yol bulma özelliği nasıl çalışır? Standart grafik-arama yöntemleri (DFS, BFS veya A * gibi) böyle bir kurulumda imkansız görünüyor.


2
A * neden bu grafikte işe yaramaz?
user712092


1
@ tenfour, bağlantı şimdi koptu.
Montreal

Yanıtlar:


29

Çoğu durumda, A * 'yı bir gezinti ağında (genellikle "navmesh" olarak adlandırılır) kullanmak, ticari RTS'lerin kullandığı yol bulma çözümüdür. Navmeshe'lerin nasıl çalıştığı, neden yol noktası sistemlerinden daha iyi bir çözüm oldukları ve uygulama kaynaklarına bağlantılar hakkında ayrıntılı bir açıklama var .

Vb devriye, siperde, muhtemelen AI davranışı (kontrol etmek, sizin navmesh tepesine bir geçiş noktası katmanı uygulamak isteyeceksiniz o özel oyun modları (nokta / düğüm yakalama) ya da geliştirme birimleri üzerinde konum planlama Eğer varsa pathfinding değil ).


17

Check out akış alanını Komutanı 2. Supreme kullanılan algoritma It does do sistemlerini pathfinding çoğu RTS çok daha iyi bir iş (birkaç örnekler için 0:50 atlayabilirsiniz.)


4
Bu gerçekten harika bir demo ama bana uygulama hakkında hiçbir şey
anlatmıyor

4
Bir cümleyle bahsettiler - bu, grail.cs.washington.edu/projects/crowd-flows adresinde bulabileceğiniz UW'nin kalabalık akış araştırmasına dayanıyor .

Akış alanı algoritması oldukça ilginç görünüyor ve kesinlikle birçok algoritmadan daha çok daha iyi bir dağarma işi yapıyor gibi görünüyor, ancak keşke sistemin nasıl çalıştığını değil, sistemin nasıl çalıştığını açıklayan bir belge olmasını diliyorum. Doğal olarak, geliştiricilerin böyle bir çekirdek sistemi uygulamadan önce sorması gereken birçok soru vardır, ancak bu durumda, bu soruları yanıtlamanın tek yolu sistemi uygulamaktır. :(
Ari Patrick

2
@Kragen: A * düzleminden (özellikle yol işaretli) tekrar tekrar birbirlerine çarpmalarına neden olmadan önce sadece iki üniteye ihtiyacınız var ve bunun üzerinde çalışacak bir tür sisteme ihtiyacınız var.

5
Videoya göre, Starcraft 2'nin yol bulgusu buna benziyor. SC2 akış alanını kullanıyor mu?
Chris Bui,

7

Birçok eski oyun A * kullanıyor. Kullanılan orijinal Starcraft A *; hangi çarpışma ile başa çıkmak için bazı sorunlara yol açtı. Starcraft 2's, büyük grupların sıvı kontrolünü sağlamak için bir yüzdürme / akın davranışı kullanarak çarpışmayı çok iyi ele alıyor. Bu gamedev makalesinde bunun nasıl başarılabileceği tartışılmaktadır.


2

Diğer cevapları ona zaten kabul ediyorum, ama aynı zamanda, WoW / Warcraft3'ü gerçek 2D dünyalar olarak düşünmeye çalışıyorum. Tilebased'den farklı, sadece karolar değiller.

GPS'in en iyi yolu nasıl bulduğunu da düşünebilirsiniz. bağlantılı haritalar üzerinden yol bulma için bir sürü hesap var.

Sanırım ilk "Quake botlar" senaryolarından bazıları, "bilinmeyen alanlarda" çalışmak üzere geliştirildikleri için size yardımcı olabilir çünkü kendi seviyelerimizi sıfırdan tasarlayabiliriz.

Sonuçta, böyle bir harita ile başa çıkmamdaki kişisel yolum, onu A * yol göstericisi olarak düşünmek olacaktır. Ama önce her "kiremit noktasını" önceden hesaplardım ve tüm bunları "en yakın komşular" vb. İle indekslerdim. Sonra A'dan B'ye bir nesnenin gitmesi gerektiğinde, B'de sadece aradığınızda, ne bağlandığını görün ve siz tekrarlayana kadar tekrarlayın hedefe ulaşmak.

Oyun ve manzara / senaryo türüne bağlı olarak, farklı tarama öncesi taktikleri de yararlı olabilir. Bazı oyunlarda çok az engel var ve bunlar "streight line" hareketi + bazıları "nesneler için nasıl dolanırım" olabilir.

Umarım bu biraz mantıklı ve belki de çalışmak için bazı düşünceler verdi.


1

Çoğu oyun, haritada yolları bulmak için bir tür Arama Algoritması veya A * kullanır. AI, bazı nedenlerden dolayı performans nedenleriyle açıkça ayarlanmıştır.

Bunu, Zerglings’in iyi bir şekilde iyi gidemediği Starcraft 2’de fark edeceksiniz, Zerglings için bunu yapmak bir CPU kabusu olacaktı. Orada sadece A'dan B'ye gitmek için en iyisini yaparlar ve hatta en iyi yolu bulmaya çalışmazlar. Mümkün olduğu kadar yakına gelecekler, ardından boğaza veya rampada şişe boynu.


1

Harita bir ızgaradır. Izgara bir grafiktir. A * grafikte çalışır, algoritmayı arayan bir grafiktir. A * birkaç grafik düğümü aramalı.

Bahsedildiği gibi, gezinme ağını kullanabilirler. Fakat A * (veya benzeri bir şey) bu ağın üstünde olacak, çünkü bu ağın çokgenleri bir grafiğin düğümleridir; A * daha sonra bir çokgenden başka bir çokgene giden yolu arayacaktır.

Warcraft veya ticari oyunlar hakkında emin değilim, ancak Collaborative Diffusion adlı bir teknik de var ve bu çok basit; genellikle ızgarada yapılır. Aynı olmasa da öncekine çok benzeyen Potansiyel Alanlar adı verilen bir teknik de vardır .

Ayrıca deneyebilirsiniz:

  • Bu oyunların bazılarında kaynak kodun olup olmadığı
  • Bu oyunların bazı klonlarının kaynak mevcut olup olmadığı
  • SDK veya editörlerin bir şey ima etmediği
  • Bu oyunları yapan şirketlerin işverenlerine sorun, bazıları paylaşmaya istekli olabilir

0

Tamamen tecrübeli değilim, ancak iyi bir çözümün bilinen haritayı tam olarak kontrol etmekten ziyade, buluşsal bulgulara dayandığını düşünüyorum. Düşünebildiğim buluşsal bulgular yerel ve deneyim temellidir. Yerel kontroller, gerekli yöne doğru ilerlemeye devam ederek yerel arazi kontrolü ve engellere dayanabilir. Bence çoğu harita, labirent benzeri karmaşık hareketler gerektirmiyor, fakat oldukça bağlantılı. Diğer bir sezgisel yöntem, birimleri bilinen veya yakın bilinen konumlara taşımak için önceki bilinen yolları (diğer birimler tarafından veya açıkça kullanıcı tarafından keşfedilmiş) kullanmaktır. Ancak ZorbaTHut'un dediği gibi kapalı alanlarda değil, büyük haritalarda ilerlemekten bahsediyorum. Kalabalık durumlarda, algoritma daha karmaşık olabilir; bu tür "tahmin", aynı ekibin birimleri arasında koordinasyon veya sadece semafor benzeri bekleme stratejileri gerektirir. Ayrıca,

Sezgisel algoritmaların iyi olduğunu düşünüyorum, çünkü genellikle makul bir hesaplama süresi olan büyük alanlarda iyi bir çözüm sunarlar (bu, birçok üniteyi taşırken fark eder).

Üzgünüm, eğer bu genel bir cevapsa: Kalabalıklarla çalıştım, ama alan oldukça tuhaftı ve algoritmanın nasıl çalıştığını tam olarak açıklayamıyorum (yine de genel olarak tanımlanmamış, ajan tabanlıydı). Umarım cevabımdan bazı faydalı fikirler edinebilirsin.


Mmmh Söylediklerimde neyin yanlış olduğunu merak ediyorum ... Yorum yapmak çok mu zordu?
AkiRoss

BTW, A * 'nın sezgisel yaklaşımı kullandığını vurgulamak isterim. -2 için teşekkürler.
AkiRoss

Cevabınız "Ditch A * ve onun ilk ve kendi rulo" anlamına gelir. Bu makul bir cevabın başlangıcı olabilir, ancak öneri dışında çok az bilgi veriyorsunuz. Aşağı oylamanın sebebinin, çözümünüzün uygulanmasının ne kadar zor olacağını netleştirmemeniz olduğunu düşünüyorum. Sınırsız bir süre verilen bir süper dahinin, bir donanmada A * 'dan üstün olacak olan belirli bir RTS için bir kodlama algoritmasını kodlayabileceği / ayarlayabileceğinden şüphem yok. Ama "dahi" ve "sınırsız" gelmek çok zor.
deft_code 24:10

Ah ... Doğru. Adamın jenerik bir cevap istediğini düşünmüştüm, çünkü nasıl yapılacağını sormadı, ama genel olarak nasıl çalışıyorlar. Her neyse dediğim gibi bir uzman değilim: Genel bir IA uygulamasında geniş alanları keşfetme hakkında bildiğim çözümler hakkında biraz bilgi veriyordum. Yorumun için teşekkürler.
AkiRoss
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.