Hareketli bir hedefe giden yolu bulmak için standart çözüm nedir?


28

Oyun gibi bir 2D RTS üzerinde çalışıyorum, temel A * bir birimi A noktasından B noktasına taşımak için mükemmel çalışıyor.

Fakat şimdi sürekli yol bulma problemiyle karşı karşıyayım, A, hareketli bir B nesnesine saldırmak gibi, A Nesnesinin konumu değiştiğinde her karede A * çağrısı yapıyorum.

Peki bu soruna standart yöntem nedir?


1
Standart bir yöntem yoktur.
Kylotan

3
Tek bir standart yöntem yoktur, ancak sorunu çözmek için yaygın yöntemler hakkında çok fazla literatür vardır.

Yanıtlar:


17

Bildiğim kadarıyla "Dynamic A *" anlamına gelen D * algoritmasına bir göz atabilirsiniz. Bu algoritma, dinamik bir ortam için yol bulma bilgisini burada, hareketli bir hedefle hesaplamak için kullanılır.

İşte hedef yol bulma özelliğini hareket ettirmek için D * kullanan bir makale: Hareketli Hedef D * Lite


10

Bir seçenek, her birkaç karede yalnızca bir kez yeni bir yol oluşturmaktır. Saniyede 60+ kez yerine saniyede bir veya iki kez yaptıysanız, kullanıcının ikisi de çok hızlı hareket eden nesneler olmadıklarını fark etmeleri pek mümkün değildir.


8

Köpeklerin birini avlarken görünüşte kullandığı "köpek eğrisi" yaklaşımını kullanabilirsiniz. Etki noktasının "gelecekte" nerede olacağını ve bu pozisyona doğrudan getireceklerini hesaplarlar.

Basit bir yaklaşım yolu, çizgiler boyunca bir şey olabilir:

A = NPC

B = Hedef

T = B: s konumuna ulaşma süresi (B: s ilk konumu)

B'nin 'T' zamanında nerede olacağını (B aynı hız / açıyla devam ederse) hesaplayın ve oraya gidin.

Bu mesafe değiştikçe mükemmel bir yöntem değildir, mükemmel bir çözüm yapmaktan çok daha basit ve sadece 'B' ye girmeye çalışmaktan çok daha iyidir.


3
Köpekleri bilmiyordum. Bugün bir şey öğrendim!
SteeveDroz

3

Kylotan ile standart bir yöntem olmadığı konusunda hemfikir .

Gördüğüm bir yöntem, hedefin aynı yönde hareket etmeye devam ettiğini varsaymak ve yol bulma algoritmanızdan geçerken hedef konumunu değiştirmekti. Bu, A * düğümlerinizde iki ölçüm tutmak zorunda olduğunuz anlamına gelir (sadece maliyetin aksine maliyet ve zaman).

Bundan daha iyisini yapmak çok zor. Hedefin değişmeyen yolu hakkında gerçekte bilginiz olmadığı sürece, oldukça zorlu bir AI ülkesine doğru ilerliyorsunuz çünkü AI'nın hedef davranışı nerede tahmin edeceğini veya simüle edeceğini tahmin etmek için ikinci bir tahminde bulunacaksınız. Bu tür AI, herhangi bir 3D oyun AI araç setinde standart olmayan bir alan olan oyun teorisinden gerçek zamanlı bir AB oyunudur .


2

Dinamik yol bulma işlemini yapmanın bir yolu, işletmenin hedefin nereye gittiğini ve oraya gittiğini tahmin etmesidir.

Bunu yapmanın bir yolu Taylor serisi kullanmak.

Zaman içinde hedefin yolunu arayacağım, S (t) fonksiyonu, burada S, pozisyon ve t, şimdiki zamandır ve yola yaklaşımı, A (f) ve f, gelecekteki tarihin yaklaşmakta olduğu tarihtir. .

O zaman en basit ve en aptal yaklaşım A (f) = 0'dır.

En basit olanı A (f) = S (t) 'dir, t şimdiki zamandır ve f gelecek. Bu hedefin yerinde durduğunu tahmin ediyor.

Üçüncü en basit olanı A (f) = S '(t) * f + S (t), burada S', zamana göre S'nin türevidir. Bu, hedefin hızlanma olmadan sabit bir hızda devam ettiğini öngörüyor.

Dördüncü en basit olanı A (f) = S '' (t) * f ^ 2/2 + S '(t) * f + S (t). Bu hedefin düşen bir top gibi sabit bir hızda hızlandığını tahmin ediyor.

Bunun bir oyun için muhtemelen daha uygun olan zaman içindeki değişim açısından yeniden ifade edilebileceğini biliyorum. Şimdi S herşey olabilir. Bir X koordinatı olabilir, bir Y koordinatı olabilir, nesneler arasındaki mesafe olabilir, bir açı olabilir. Ayrıca bir nesnenin gelecekteki yolunu tahmin etmenin daha iyi yöntemleri olabilir, bu yüzden biraz etrafa bakarım.


1

Arazi oldukça açıksa ve hedef takipçiden çok uzak değilse, engelleme yönlendirme davranışını kullanabilirsiniz. Temel olarak, hedefin önünde çok uzak olmayan ve çok yakın olmayan bir konum hesaplamak için hedefin konumunu ve hızını alırsınız ve izleyiciyi o noktaya yönlendirirsiniz (her biri düzenli aralıklarla hesaplanır).

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.