Duvarlarda yürüyebilecek bir karakteri nasıl yapabilirim?


34

Örümcek gibi hareket edecek bir karakter elde etmeye çalışıyorum: Bir topun normalde toplayamayacağı yükselen bir eğim göz önüne alındığında, örümcek yavaşça sürünürdü.

Benzer şekilde, orta havadaki bir dikdörtgen platform göz önüne alındığında, örümcek, kenara uzanırken düşmek yerine, kenar boyunca sarar ve yana doğru ve sonra platformun altından devam eder (sonunda platformun çevresinde yürür).

Çeşitli Unity 2D bileşenlerine çok az başarı ile baktım. :(

Dünyamın çarpışma sınırlarının çoğu, Collider 2D bileşenleri ile işaretlenmiştir (yerçekiminden etkilenen basit bir topla harika çalışır, ancak bu örümcek karakteriyle daha azdır).


1
Bu oyun: youtube.com/watch?v=ga4Zqq1tXa8 ( PS1'de "Örümcek", uzun zaman önce oynadım) bir ilham kaynağı olabilir.
tigrou

Yanıtlar:


43

Bir yorumda Gamasutra makalesine zaten karmington bağlı olduğunu fark ettiğimde Walker düşmanı üzerindeki Asteroid Base bloguna bir link göndermek üzereydim .

Muhtemelen bu, kendi başına bir cevap olarak biraz daha görünürlük ve açıklama vermeye değer.

Ben güneş ışınlarına bekliyorum.

Hile raycasts . Bunlar, kodunuzun bir çarpışma için bir çizgi boyunca taramasına izin verir.

Walker'ın yüzeylere güzel bir şekilde hizalanmasını sağlamak için, biri Walker'ın sol tarafından diğeri sağdan (yukarıdaki kırmızı ve sarı çizgiler) aşağıya doğru iki ışın atarlar.

Her RaycastHit2D nesnesinden, yüzeye dik gösteren normal bir vektör elde edebilirsiniz (macenta ve yeşil çizgiler). Normalleri iki vuruştan ortalayarak, karakterin için altta yatan araziyi (camgöbeği çizgiyi) makul derecede yansıtan uygun bir oryantasyon elde edersiniz.

Karakteri araziye takılı tutmak için (bu sürtünme düşükse bazı kaymalara yol açabilir) veya karakteri Walker ile yapılan ortalama ışın kesişme noktasına manuel olarak konumlandırmak için aşağı doğru bir kuvvet uygulayabilirsiniz.

Karakterinizin titreyen veya görünen robotik olmasını engellemek için karakterin yönünü kademeli olarak karıştırmak istersiniz (Walker köşeyi geçtiğinde normalin nasıl keskin bir şekilde değiştiğine bakın, ancak vücut yumuşak bir şekilde hareket eder).

Eğer arazinizde keskin köşeler varsa, muhtemelen bu ışınları hafifçe içeriye doğru açılamak isteyeceksiniz - böylelikle örümcek 90 derecelik bir uçurumun kenarından geçerse, çıkıntılı ışın uçurum yüzeyine çarpacaktır.

Asteroid Base ekibi ayrıca Walker'in hareketi (gösterilmemiştir) yönünde kısa bir ışın da çeker ve bu, araziye çarparsa o taraftaki ışını geçersiz kılar. Bu 90 derecelik içbükey bir köşeye girerken yürüteç sıkışmış olmamasını sağlar.

Dokümanlara göre, 2B raycast, 3B'den farklıdır ve içinde ışının başladığı çarpıştırıcıları tespit eder. Bu bana balık gibi geliyor, ancak testiniz bunu onaylarsa, sadece tırmanılabilir arazi çarpışmasını tespit etmek için ışınları sınırlamak için bir layerMask kullanmak isteyeceksiniz.


2B raycastların, raycast'ın başlangıç ​​noktasını içeren çarpışmaları algılayacağını onaylayabilirim. Bununla birlikte, ilk saptama daima 0 mesafeli ve raycast'ın yönünün normal tersi yönde döndürüldüğü için kolayca filtrelenebilir.
XenoRo

2

Bunun için özel koda ihtiyacınız olacak.

Temel olarak, en yakın nesnenin ne olduğunu, söz konusu platform gibi bilmeniz ve ardından en yakın kenarı ve o kenardaki en yakın noktayı bulmanız ve ardından örümceğin konumunu ve oradan dönüşünü hesaplamanız gerekir.

Onu gerçekten güzel yapmak kolay olmayacak, ancak çalışmasını sağlamak için iyi bir mücadele olmalı.


2
İşte gerçekten güzel bir bağ, tam olarak davanıza uygun oluyor emin eğer, ama belki belki ... gamasutra.com/blogs/AdamWinkels/20140220/211306/...
karmington
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.