Kesmek ve eğik çizgi oyunda karakter hareketi için iyi bir teknik mi arıyorsunuz


51

Hack & slash oyunu yapıyorum ve karakterimin örneğin Torchlight, Diablo, vb. Gibi hareket etmesini istiyorum. Şu anda bir zeminin yürünebilir tüm alanları için düğüm kümesi oluşturuyorum. Bir yere tıkladığımda oyuncu enterpolasyonlu düğüm yolu üzerinden gidiyor. Bu çok doğal görünmüyor. Oyuncu bir robot gibi hareket eder. Düşmanlar ayrıca bu düğüm sistemini hareket için kullanır ve aynı sorunu paylaşır, ancak onlarla bir sorunum daha var. Düşmanlar oyuncu tespit ettiğinde ona en kısa yoldan giderler. Bazen aynı yolu kullanırlar ve onu çevrelemek yerine oyuncuya sıraya girerler. Düşmanların farklı yollar seçmesini ve oyuncuyu kuşatmasını nasıl sağlarım. Bu sorunları nasıl çözebilirim biliyor musunuz? Belki karakter hareketi için farklı yaklaşımlar kullanmalıyım?


Mevcut tekniğim:

görüntü tanımını buraya girin


Torchlight ekran görüntüsü:görüntü tanımını buraya girin

---GÜNCELLEME---

Bu durumlarla nasıl başa çıkacağımı bilmek istiyorum:

Durum 1, yolda dinamik / statik engellerim var

görüntü tanımını buraya girin

Durum 2, Düşmanlar, oyuncuya giden sam yoluna sahiptir (bizimle savaşmak için kuyruğa girmek) görüntü tanımını buraya girin


10
Diyagramlar ve ekran görüntüleri için +1 (ve iyi bir soru). Her zaman işe yarar.
Komünist Ördek

Bu, bu meydan okumayla başa çıkmanın farklı yolları hakkında çok fazla tartışma ve öneri olacağını umduğum harika bir soru (+1) (rotaları, AI, vb. Rastgele etkiler).
Randolf Richardson

1
AI oluştururken bir puanlama sistemi kullanmanın iyi bir uygulama olduğunu düşünüyorum . Her düşmanın puanına bağlı olarak (örneğin oyuncuya ulaşma zamanı), onlara belirli davranışlar verebilirsiniz. Örneğin 8 çetelerin oyuncu saldırabilir max ise, ilk sekize daha yüksek skorlar sahip olanlar bilerek bulmak için deneyebilirsiniz uzun , oyuncuya yolunu onları daha zeki görünmesine yol açmıştır.
Jonathan Connell

Hala cevap arıyorum, deniz ağındaki engellerle (dinamik / statik) nasıl başa çıkabilirim? , Kullanamıyorum Recast
piotrek

Yanıtlar:


24

Seyrüsefer veri yapısı ile birlikte Direksiyon Davranışları .

Bunu yapmanın birkaç yolu vardır, ancak temel kavram budur. Her dışbükey bölümde yol bulma uygulayabilmeniz için bir gezinme ağı kullanmak daha kolay olabilir .

Grafiği tutma konusunda kararlıysanız, düğümden düğüme bir yolu sert bir şekilde takip etmek yerine, yoldaki her düğüme bir Seek davranışı kullanabilirsiniz .

Kullanabileceğiniz bir başka yöntem de Path Smoothing'dir ancak bunun oldukça hesaplamalı olarak pahalı olduğunu unutmayınız.

Umarım yardımcı olur.

DÜZENLE:

Engellerden kaçınma konularında yardımcı olmak için bir çeşit Engelden Kaçınma özelliğini kullanın .


Teşekkürler, gezinti ağını nasıl oluşturabileceğimi biliyor musunuz? Yoksa bunu yapmanın başka yolu var mı? Haritam, kesintisiz zemin parçalarıyla (dörtlü / üçgen) oluşturuldu.
piotrek

1
Gezinme ağı oluşturmak için her zaman Recast'ı ( code.google.com/p/recastnavigation ) kullanabilirsiniz . Sadece bir "üçgen çorbası" (bir sürü poligon) vermeniz gerekir ve bu sizin için üretecektir.
Ray Dey

Bununla karşılaşan tek kişi ben miyim ama bağlantı: ai-blog.net/archives/000152.html öldü. Aslında www.ai-blog.net
123iamking

3

Diğerlerinin önerdiği gibi bir donanma ağına geçmek yerine, bir nodgrafı ile kalmayı tercih ediyorsanız, her düşmanı belirli bir yönden saldıracak şekilde atayarak "onu çevreleyen oyuncuya çevirin" sorununu çözebilirsiniz.

Bunu başarmanın pek çok yolu var, ama ben oyuncu nesnesinin her yöne (kuzey, kuzeydoğu, doğu vb.) Tek bir jetona sahip olduğu canavarlara benzersiz yönler atamak için genellikle bir 'belirteç' sistemi kullanıyorum. Bir düşman oyuncuya doğru yol almak istediğinde, ilk önce ondan bir belirteç edinmelidir. Belirteç tarafından belirtilen yön, canavara, oyuncunun hangi tarafına geçmesine izin verildiğini gösterir. Oyuncunun her bir yön için yalnızca bir jetonu olduğundan ve canavarların saldırmadan önce bir jetona ihtiyacı olduğundan, birden fazla canavarın tümü oyuncunun aynı tarafına gitmeye çalışmaz, bu da yollarını biraz parçalamalıdır.

Ayrıca, canavarları sahip oldukları jetonla eşleşen bir yöne yaklaşmaya teşvik etmek için, yol bulma sürecinde düğümlere küçük bir ceza uygulamak isteyebilirsiniz. (Bir canavar, doğudan saldırmasına izin veren bir tokene sahipse, o zaman o canavar için "en kısa yolu" belirlemek amacıyla, oyuncunun kuzey / batı / güneyindeki herhangi bir yol düğümünü sanki tedavi edin. bunlar sadece bir tane yerine birkaç düğümdür). Bu, canavarları birbirinden daha hızlı ayıracak ve oyuncuya tek dosyada ilerlemek ve sadece son adımda yayılmak yerine kuşatmaya çalışacak.


2

Temelde, yapmak istediğiniz düşmanlar için makro düzeyde yol bulma (konveks alanlar oluşturma ve oyuncunun bulunduğu alana işaretleme hakkında düşünün) ve mikro seviyede bazı stil stili direksiyon davranışları yapmayı düşünün (yakın olduğunuzda) oyuncuya).

İşte bir davranış davranışı örneği: http://www.red3d.com/cwr/boids/

Oyuncu için, fener ışığının tıkladığınız / sürüklediğiniz yer için bir deniz yolu ağında yol bulma işi yaptığını düşünüyorum ve bu oldukça iyi çalışıyor. Doğrudan kontrolden biraz daha kopmuş gibi hissedebilir, ancak oyuncu için daha iyi sonuçlar doğurur.


Fakat, örneğin merdivenli olan ne? Düşman orada da bana saldırabilir, onu başka bir denizci ağı yapabilir mi?
piotrek

Nav örgüsünün bir parçası olmalı, kendi dışbükey şekliyle.
Tetrad

1
Alternatif olarak, işaretleme noktanızı işaret etmeye devam edebilir ve "yakın" olduğunuzda fizik temelli direksiyon davranışlarına geri dönebilirsiniz.
Tetrad

Gezinme ağlarındaki dinamik engellerle nasıl başa çıkabilirim?
piotrek

1
İşte yeniden yapılanmanın nasıl üzerinde çalıştığı hakkında bir blog yazısı: digestingduck.blogspot.com/2011/03/… .
Tetrad

1

realworld yol bulma problemi için kullanılan rrt adlı bir algoritma vardır. Kahramanınızın (veya düşmanlarınızın) yürüyebileceği yüzey, nesnelerin taşıyabileceği su yüzeyine bir girdidir ve bazı optimizasyon algoritmaları kullanarak hedefinize bir yol bulur. Bildiğim kadarıyla bu algoritma, soygun liglerinde büyük ölçüde kullanılıyor. hızlıdır, en kısa yolu bulur ve çarpışma ve keskin dönüşlerden kaçınır. Bu powerpoint gösterisini yolu nasıl oluşturduğunu anlamak için kullanabilirsiniz.


Daha fazla baktıktan sonra sağladığım sunum, rrt'nin ne yaptığını anlattığını ve bazı durumlarda daha iyi çalıştığını iddia ettiği yeni bir onay önerdiğini belirtti ve RTS oyunları için kullanılan algoritmanın size yardımcı olacağını umduğunu belirtti.
Ali1S232

0

Yol bulma rotalarının daha "gerçekçi" görünmesini sağlamak için, Oyun Programlama Gems Vol.1'deki doğal görünümlü A * hakkındaki makaleye göz atmanızı öneririm

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.