Çalışma zamanında katmanlarınızı değiştirmeyi düşünün.
Tüm katmanlara sahip belirli nesneler için çarpışmaları etkinleştirme / devre dışı bırakma
Physics.IgnoreCollision ve Physics.IgnoreLayerCollision , sırasıyla iki çarpıştırıcı arasındaki ve iki katman arasındaki çarpışmaları devre dışı bırakmanıza olanak tanır.
Belirli bir çarpıştırıcıyı çarpışmalardan hariç tutmak istiyorsanız, bunu yapmanın yerleşik bir yolu yoktur. Tetikleyici olmayan çarpıştırıcılara sahip kinematik olmayan katı gövdeler kullanıyorsanız, yanıtları etikete göre filtrelemeye çalışsanız bile her zaman bir yanıt olacaktır.
Bunu projemizde başarma şeklimiz "Boşluk" adlı bir katman oluşturmaktı. Hiçlik hiçbir şeyle çarpışmaz.
Artık bir çarpıştırıcının çarpışmasını katmanını "Boşluk" olarak ayarlayarak geçici olarak devre dışı bırakabilir ve eski katmanını geri yükleyerek yeniden etkinleştirebilirsiniz.
İşte öz:
int oldLayer = -1;
int voidLayer;
void Start()
{
voidLayer = LayerMask.NameToLayer("Void");
}
void DisableCollider(Collider col)
{
oldLayer = col.gameObject.layer;
col.gameObject.layer = voidLayer;
}
void EnableCollider(Collider col)
{
col.gameObject.layer = oldLayer;
}
Bunu özellikle yaptık çünkü katı gövdelerin çocukları olan çarpıştırıcıların etkinleştirilmesi ve devre dışı bırakılması bazı durumlarda işleri gerçekten mahvedebilir. Böylece, bir bileşik rijit gövde çarpıştırıcısının bir parçasını güvenilir bir şekilde devre dışı bırakamazsınız, ancak bileşik çarpıştırıcı parçalarından birinin katmanı etrafında güvenilir bir şekilde takas yapabilirsiniz.
Şimdi sizin özel durumunuz
Zombi çarpışmasının arabanız üzerindeki etkisini azaltmak için, zombilerinizi kinematik katı gövdeyi tetiklemeyi veya başka bir deyişle kütlelerini çok küçük (float.Epsilon gibi) hale getirmeyi düşünün, bu nedenle etkinin otomobilin momentumu üzerinde sıfır etkisi vardır. Çarpma durumunda, bu katman anahtarını da yapabilirsiniz, böylece birincisi araba gövdesine ihmal edilebilir bir kuvvet uygulasa bile, sonraki çarpışmalar tetiklenmez.
Onları araba ile çarpışmayan bir katmana bile dönüştürebilirsiniz.
Ayrıca, zombilere koşarak devreye giren başka bir çarpıştırıcı da koyabilirsiniz. Bu şekilde OnTriggerEnter çarpma kuvvetlerini taklit edebilirsiniz. Bununla o kadar doğru olamazsınız, ancak temas normallerinin zombi eğlenceli bir yere atmak için yeterince iyi olabileceğini tahmin edebilirsiniz.
Kendinize şunu sormalısınız:
Arabamla etrafta dolaşan zombileri devirmek mi istiyorsunuz yoksa sadece bir ölüm animasyonu mu oynamalılar?
Arabanın hızının ve açısal hızının zombilere çarparak daha küçük şekillerde etkilenip etkilenmediğini umurumda mıyım?