Portalların çarpışma tespiti nasıl uygulanır?


12

Örneğin, bu senaryoyu alın (korkunç çizim becerilerimi affedin): görüntü

Bu, çöp adamın mavi portala (kırmızı porta bağlı) geçtiği "Portal" a dayanır, ancak kırmızı portalda onu durduran bir duvar vardır. Bu yüzden portaldan tamamen geçemez.

Benim sorum şu: Onlarla fizik / çarpışma tespiti nasıl yaparım? Müzikçaları dilimleyebilir miyim? Onları bağlamanın bir yolu var mı? Bunu yapmayı destekleyen fizik motorları var mı? Değilse, nasıl yapabilirim?


Bildiğim kadarıyla Portal 1'in geliştirici yorumundaki bazı şeyleri açıklıyorlar.
Archy


@ Byte56, teşekkürler, gönderimi güncelledim. Bu daha fazla açıklığa
kavuşması

1
Portallarda serbest yüzen yerleşim olmadığından, açıkladığınız durumun portalda çok nadir olduğunu düşünüyorum (eğer varsa). Duvarlara ve sadece belirli duvarlara yerleştirilirler. Bir portal yerleştirebildiğim bir durumu hatırlamıyorum, ancak portalın diğer ucundaki bir engel nedeniyle geçemiyorum. Geçiş dönemi boyunca her iki konumda da oyuncunun geçici bir kopyasını oluşturabileceğinizi düşünüyorum.
MichaelHouse

2
@ Byte56: Çok hatırlamamanız gerekir. Bunun Portal 1'de yapıldığını hatırlıyorum. Bir kişinin ölmekten kaçınmak için bir portal kullanabileceği bir kırma alanını hatırlıyorum. Portalların yakınındaki şeylerle çarpışmak yaygın bir durumdur ve motor bunu kolayca idare eder.
Nicol Bolas

Yanıtlar:


7

Portal oyunu bu sorunu çözmüş hangi güzel yolu vardır:

Oynatıcı kaynak portaldan (mavi) geçer ve hedef portaldan (turuncu) çıktığı görülür. Oyuncu hedef portala kopyalanır ve üzerinden geçerken görülür. Oyun, kaynak portaldan bakarken gördüğünüz görüntüyü ikinci bir kamera ve doku oluşturma özelliği kullanarak işler.

Ancak, oynatıcının hedef konumdaki kopyası fizikle etkileşime girmez . Yalnızca oluşturma amaçlıdır. Bunun yerine, kaynak portalın diğer tarafında sanal çarpışma nesneleri oluştururlar ve oynatıcının bununla çarpışmasını sağlarlar. Bu fiziği basit tutar.

Bu sanal nesnelere yalnızca oynatıcının portaldan tam olarak geçmeden erişebildiği kadar ihtiyacınız vardır. Oyuncu portaldan tamamen geçer geçmez durum tersine döner.

Gösterilecek bir resim : Mavi portal, kaynak portal, turuncu portal ise hedef portaldır. Kesik çizgili beyaz kutu sanal çarpışma nesnesidir, gerçek kutu ise oluşturulmuş nesnedir. Oynatıcı (kırmızı noktalı) yalnızca doğrudan etrafındaki nesnelerle etkileşime girer. Turuncu portaldaki nesneler tamamen yok sayılır.

resim açıklamasını buraya girin


4
" ikinci bir kamera ve doku oluşturma " kullanma Portal 1'deki geliştiriciler yorumu açıkça doku oluşturma özelliğini kullanmadığını söyledi , çünkü bu onların ihtiyaçları için iyi çalışmadı (özellikle diğer portallardan portallar görmekle) ). Bunun yerine, temel olarak dünyanın bir versiyonunu portalın diğer tarafına dönüştürürler ve sadece yeniden oluştururlar.
Nicol Bolas

Vay canına, bu neredeyse her şeye cevap veriyor! Sadece merak ediyorum, portalın içinde nesneler olan bir delik olması işe yarıyor mu?
MiJyn

6

İşte böyle yapmaya çalıştım.

Bir portalın içindeyken, fizik motorunda oynatıcının iki kopyası olacaktır. Her kopya, portalın karşı tarafındaki tüm çarpışmaları yok sayar ve ardından sonuçları birleştirir ve simülasyon sonuçlarını her iki modele de uygularsınız.

İdeal olarak, yerçekimini oyuncunun her yarısı için ayrı ayrı uygularsınız, ancak oyuncunun kütle merkezinin bulunduğu portalın yanına uygulayarak uzaklaşabilirsiniz.

Bu çarpışmaları yok saymak için uygun bir birim ayarlamanız ve içinde bir nokta olup olmadığını test etmeniz gerekir. Bir silindir (muhtemelen dikey olarak gerilmiş) iyi bir seçenek gibi görünmektedir. Test o zamanif (!collisionPoint.InsideCylinder(portal)) ProcessCollision(); else IgnoreCollision();

Çoğu fizik motorunun, bir nesnenin çarpışabileceği şeyleri filtrelemek için bir sistemi olduğuna inanıyorum, bu yüzden standart bir fizik motoru kullanmak mümkün olmalıdır. Örneğin, http://bulletphysics.org/mediawiki-1.5.8/index.php/Collision_Filtering#Custom_collision_filtering

Sonuçları birleştirmek için en basit seçenek muhtemelen ikisi arasında bir tür esnek olmayan kısıtlama eklemek ve fizik motorunun bunu ele almasına izin vermek olacaktır.


Hmm, tamam, bunu nasıl yaparım? Müzikçaları kopyalama konusunda rol alıyorum ama bunun dışında clueless. Karşı taraftan gelen çarpışmaları nasıl görmezden gelirim? Sonuçları nasıl birleştirebilirim?
MiJyn

Daha ayrıntılı olarak düzenledim.
Adam

teşekkürler, bunu düşüneceğim ve daha sonra kafamda düz olarak ayarlayabileceğim sonra cevap
vereceğim

Çok teşekkür ederim, cevabınız ve Virtlink'in sorumu yanıtlıyor :) Şimdi, "doğru cevabı" hangi şekilde ayarlayacağınıza karar vermek için ...
MiJyn

4

Oyuncunun ne kadar aşağı gittiğini nasıl hesaplayabilirim?

Neden istiyorsun? Bir oyuncunun ne kadar aşağı "aşağı" gittiğini hesaplamanıza gerek yoktur; nesne simülasyondan geçerken ne kadar aşağı gittiğini öğreneceksiniz.

Portalları nasıl bağlarım?

Tamamen oyun içi bir perspektiften bir portal, çarpılabilir objeleri katlanamaz nesnelere dönüştürmek için çarpışma ile uğraşan ayrıntılı bir ışınlayıcıdan biraz daha fazlasıdır. Bir nesne portala dokunduğunda, potansiyel olarak diğer taraftaki şeylerle çarpışmaya başlar. Nesne portaldan "yeterince uzağa" geçtiğinde, onu diğerine etkili bir şekilde ışınlarsınız, anında konumunu ve yönünü değiştirirsiniz.

Fizik normal şekilde ilerler.


When an object touches the portal, it starts potentially colliding with things on the other sideEvet kesinlikle. Bunu bir fizik motoruyla nasıl yapabilirim? Sanırım bu benim sorum :)
MiJyn

@MiJyn: Bunu yapabilecek bir fizik motoru yazıyorsunuz. Valve, Portal'ın gerçekten çalışması için Kaynak motoru kırmak zorundaydı . Hiçbir ticari veya açık kaynaklı fizik motoru doğal olarak bunu yapamaz. Portal'ın popülaritesine rağmen, piyasada çok sayıda Portal klonunun bulunmamasının bir nedeni var.
Nicol Bolas

ilginç, çünkü çok benzer mekaniklere sahip birçok oyun var (minecraft için TARDIS moduna bile bakınız). Ben olması gerektiğini eminim bazı kolayca yapmak için bir yol.
MiJyn
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.