Unity mesh collider hatası

Katılım
25 Şubat 2020
Mesajlar
12
Arkadaşlar merhaba. Bir araba park etme oyunu yapıyorum. Arabanın park alanına girdiğini belirlemek için park alanına bir küp oluşturdum. Bu küpün mesh renderer'ını kapattım ve içine box collider ekleyerek istrigger yaptım. Araba objemin child'i şeklinde body ve wheels kısımları var. Direk araba objeme box collider eklediğimde sorun yok, park alanı içerisindeki görünmez duvara çarpıyor ve bölüm geç butonu aktif oluyor. Ama ben arabama box collider yerine mesh collider koymak istiyorum. Mesh collider'i direk araba objeme koyduğum zaman araba sağa sola zıplamaya başlıyor. Bende mesh collider'i araba objemin child'i olan body objesinin içine koyuyorum. Ama bu sefer de etraftaki katı cisimlerle çarpışmasına rağmen benim park alanımdaki mesh renderer'i kapalı olan sanal duvarıma çarpmıyor. Bu işlem için kullandığım çarpışma kodu "ontriggerstay" acaba farklı bir kod mu kullanmalıyım? Hatayı nerede yapıyor olabilirim? Acil yardımlarınızı bekliyorum.
 
Merhaba. Aracınızın üzerine basarak mesh colliderın görüntüsünü atabilir misiniz? Şu anda convex modda mı mesh collider? Neyin üzerinde var? Aracın üzerindeki tüm colliderlarla beraber gözüktüğü bir sahne görüntüsü atabilir misiniz?
Merhaba. Aracınızın üzerine basarak mesh colliderın görüntüsünü atabilir misiniz? Şu anda convex modda mı mesh collider? Neyin üzerinde var? Aracın üzerindeki tüm colliderlarla beraber gözüktüğü bir sahne görüntüsü atabilir misiniz?
OnTriggerStay fonksiyonu siz çarpışmada kaldığınız süre boyunca çağırılır. Öncelikle o fonksiyon yerine OnTriggerEnter kullanmanız gerekiyor eğer o noktaya 1 kez temas etmeniz yeterliyse. Ayrıca
[CODE lang="csharp" title="Ontrigger örnek"]private void OnTriggerStay(Collider other)
{
Debug.Log(other.name);
}[/CODE]
yazıp bunun neleri döndürdüğünü söyleyebilir misiniz bana? Bu sıra işler biraz yoğun olduğu için geç dönebilirim ama en kısa sürede yardım etmeye çalışıcam
 
Öncelikle player objemin içine mesh collider ekledim. Ancak mesh collider eklediğimde aracım sağa sola zıplamaya başladı.
Bende player dışında ekranda duran diğer araçların yalnızca body lerine mesh collider ekledim. Ve diğer araçlara eklediğim mesh colliderler çarpışmaları algıladı.
Ancak 3. fotoğrafta da göreceğin üzere, bir park alanı belirledim. park alanının içinede on_sanal_duvar adında mesh renderer kapalı bir küp koydum. Amacım araç bu küpe temas ettiği sürece kontak kapat butonu görünür olacak ve oyuncu bu butona basınca oyun sonlanacak. Aracımda box collider varken aracım bu sanal duvara çarpıyor ve kod olması gerektiği gibi çalışıyor ancak player objemin body kısmına (player objesinin kendisine eklediğimde araç sağa sola zıplıyor o yüzden childi olan body ye ekledim) mesh collider eklediğimde player objem etrafta mesh colldier eklenmiş olan diğer katı cisimlerle (diğer arabalarla) çarpışmasına rağmen sanal duvarımla çarpışmıyor. Box collider koyunca sanal duvarla çarpışıyor istenen işlem gerçekleşiyor ama mesh collider koyunca çarpışmıyor.
çarpışma olduğunda gerçekleşmesini istediğim komutta bu
 

Dosya Ekleri

  • 1.PNG
    1.PNG
    853,5 KB · Görüntüleme: 87
  • 2.PNG
    2.PNG
    792,4 KB · Görüntüleme: 87
  • 3.PNG
    3.PNG
    601,2 KB · Görüntüleme: 63
  • kod.PNG
    kod.PNG
    50 KB · Görüntüleme: 84
Son düzenleme:
Öncelikle player objemin içine mesh collider ekledim. Ancak mesh collider eklediğimde aracım sağa sola zıplamaya başladı.
Bende player dışında ekranda duran diğer araçların yalnızca body lerine mesh collider ekledim. Ve diğer araçlara eklediğim mesh colliderler çarpışmaları algıladı.
Ancak 3. fotoğrafta da göreceğin üzere, bir park alanı belirledim. park alanının içinede on_sanal_duvar adında mesh renderer kapalı bir küp koydum. Amacım araç bu küpe temas ettiği sürece kontak kapat butonu görünür olacak ve oyuncu bu butona basınca oyun sonlanacak. Aracımda box collider varken aracım bu sanal duvara çarpıyor ve kod olması gerektiği gibi çalışıyor ancak player objemin body kısmına (player objesinin kendisine eklediğimde araç sağa sola zıplıyor o yüzden childi olan body ye ekledim) mesh collider eklediğimde player objem etrafta mesh colldier eklenmiş olan diğer katı cisimlerle (diğer arabalarla) çarpışmasına rağmen sanal duvarımla çarpışmıyor. Box collider koyunca sanal duvarla çarpışıyor istenen işlem gerçekleşiyor ama mesh collider koyunca çarpışmıyor.
çarpışma olduğunda gerçekleşmesini istediğim komutta bu
Ön sanal duvara rigidbody atayıp pozisyon ve rotasyonu 0 yapabilir misiniz? Nedeni de şu. OnTriggerEnterda çarpışmayı algılaması için ya çarpıştığı objenin ya da OnTrigger'ı çalıştıran objenin üzerinde Rigidbody olması gerekiyor. Aracınızda rigidbody var o yüzden algılıyor çarpışmayı ama belki body'ye atınca rb olmadığı için algılamıyordur.
Bir de alışkanlık olması açısından isimlerle iş yapmanızı önermem. Çünkü en ufak bir değişimde kodu da değiştirmeniz gerekecek. Onun yerine bir tag oluşturup objenize atarsanız çok daha sağlam çalışır. Örneğin :
[CODE lang="csharp" title="Tag örneği"] private void OnTriggerStay(Collider other)
{
if (other.gameObject.CompareTag("Player"))
{
player.GiveTheResource();
break;
}
}[/CODE]
 
Ön sanal duvara rigidbody atayıp pozisyon ve rotasyonu 0 yapabilir misiniz? Nedeni de şu. OnTriggerEnterda çarpışmayı algılaması için ya çarpıştığı objenin ya da OnTrigger'ı çalıştıran objenin üzerinde Rigidbody olması gerekiyor. Aracınızda rigidbody var o yüzden algılıyor çarpışmayı ama belki body'ye atınca rb olmadığı için algılamıyordur.
Bir de alışkanlık olması açısından isimlerle iş yapmanızı önermem. Çünkü en ufak bir değişimde kodu da değiştirmeniz gerekecek. Onun yerine bir tag oluşturup objenize atarsanız çok daha sağlam çalışır. Örneğin :
[CODE lang="csharp" title="Tag örneği"] private void OnTriggerStay(Collider other)
{
if (other.gameObject.CompareTag("Player"))
{
player.GiveTheResource();
break;
}
}[/CODE]
Öncelikle tavsiyen için çok teşekkür ederim. Söylediğin gibi sanal duvara rigidbody ekledim ama işe yaramadı. Bende etraftaki konilerden birisini aldım ve isTrigger yaparak onu sanal engel haline getirdim. Şimdi istediğim gibi çarpışma gerçekleşiyor ve OnTriggerStay komutuna göre çarpışma devam ederken kontak kapat butonu SetActive(true) oluyor ancak çarpışma olmuyorken buton SetActive(false) olması gerekiyordu. Ama çarpışma bir kez gerçekleşince, çarpışma sona erse bile buton false olmuyor. Bunu çalıştırmak için kullandığım kodu 3. fotoğrafta sana yollamıştım. Bu neden false olmuyor olabilir ?
Sanırım onTriggerEnter ve OnTriggerExit ile çalışırsam sorun çözülecek. 😀
 
Son düzenleme:
Öncelikle tavsiyen için çok teşekkür ederim. Söylediğin gibi sanal duvara rigidbody ekledim ama işe yaramadı. Bende etraftaki konilerden birisini aldım ve isTrigger yaparak onu sanal engel haline getirdim. Şimdi istediğim gibi çarpışma gerçekleşiyor ve OnTriggerStay komutuna göre çarpışma devam ederken kontak kapat butonu SetActive(true) oluyor ancak çarpışma olmuyorken buton SetActive(false) olması gerekiyordu. Ama çarpışma bir kez gerçekleşince, çarpışma sona erse bile buton false olmuyor. Bunu çalıştırmak için kullandığım kodu 3. fotoğrafta sana yollamıştım. Bu neden false olmuyor olabilir ?
Sanırım onTriggerEnter ve OnTriggerExit ile çalışırsam sorun çözülecek. 😀
Aynen öyle OnTriggerExit'i de kullanmanız gerekiyor. Bu arada OnTriggerStay'den sonra da OnTriggerExit çağırılır. Ama sadece 1 kez bu çarpışmanın bilgisine ihtiyacınız olacağı için OnTriggerEnter kullanmak daha mantıklı. OnTriggerStay'in içindeki else triggerdan çıktığınız anlamına gelmiyor o aradığınız obje değilse kontağı kapatıyor yani o da çarpışma esnasında çalışıyor. O yüzden çalışmıyor olabilir.
 

Technopat Haberler

Yeni konular

Geri
Yukarı