Pertimbangkan untuk memanipulasi lapisan Anda saat runtime.
Mengaktifkan / menonaktifkan tabrakan untuk objek tertentu dengan seluruh lapisan
Physics.IgnoreCollision dan Physics.IgnoreLayerCollision memungkinkan Anda untuk menonaktifkan tabrakan antara dua colliders, dan antara dua layer, masing-masing.
Jika Anda ingin mengecualikan collider tertentu dari tabrakan, tidak ada cara untuk melakukannya. Jika Anda menggunakan benda tegar non-kinematik dengan collider non-pemicu, akan selalu ada respons meskipun Anda mencoba memfilter tanggapan dengan tag.
Cara kami mencapai ini pada proyek kami adalah dengan membuat layer bernama "Void". Void tidak bertabrakan dengan apa pun.
Sekarang Anda dapat menonaktifkan tabrakan collider untuk sementara waktu dengan mengatur layer-nya menjadi "Void", dan mengaktifkannya kembali dengan mengembalikan layer lamanya.
Inilah intinya:
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;
}
Kami melakukan ini secara khusus karena mengaktifkan dan menonaktifkan colliders yang merupakan anak-anak dari rigidbodies benar-benar dapat mengacaukan segalanya dalam beberapa keadaan. Jadi Anda tidak dapat secara andal menonaktifkan bagian dari collider rigidbody majemuk, tetapi Anda dapat bertukar andal di sekitar lapisan salah satu bagian collider compound.
Sekarang situasi spesifik Anda
Untuk mengurangi dampak tabrakan zombie pada mobil Anda, pertimbangkan membuat zombie Anda menjadi benda tegar yang kinematik, atau membuat massa mereka sangat kecil (seperti float.Epsilon), sehingga dampaknya tidak memiliki efek nol pada momentum mobil. Pada benturan, Anda juga dapat melakukan layer switch ini, sehingga tabrakan berikutnya tidak terpicu, bahkan jika yang pertama menggunakan gaya yang dapat diabaikan pada bodi mobil.
Anda bahkan dapat mengubahnya menjadi lapisan yang tidak bertabrakan dengan mobil.
Anda juga bisa meletakkan collider lain di zombie yang diaktifkan di ran-over. Dengan cara ini Anda bisa memalsukan pasukan dampak OnTriggerEnter. Anda tidak bisa mendapatkan seakurat itu, tetapi Anda dapat memperkirakan di mana normals kontak cukup baik untuk melempar zombie ke suatu tempat yang menyenangkan.
Anda harus bertanya pada diri sendiri:
Apakah saya ingin dapat mengetuk zombie yang tertabrak dengan mobil saya, atau haruskah mereka memainkan animasi kematian?
Apakah saya peduli jika kecepatan mobil dan kecepatan sudut terpengaruh dengan cara yang lebih kecil dengan memukul zombie?
Saya kira Anda dapat memeriksa nama-nama objek, atau menambahkan nilai nama ke kelas objek kemudian memeriksa itu?
Kemudian gunakan variabel lain yang dapat Anda gunakan untuk memeriksa peningkatan dan menambahkannya ke cek.
EDIT: menambahkan variabel ini dalam.
sumber
Saya berasumsi Anda menggunakan mesin fisika untuk melakukan 'penyimpangan' secara otomatis berdasarkan bentuk / massa ketika semuanya bertabrakan? jika itu masalahnya, maka ubah massa zombie Anda ke nilai yang sangat minimal dan mereka tidak akan memengaruhi mobil.
sumber
Ada dua kelas jawaban di sini:
Semoga ini membantu!
sumber