Jika Anda menggunakan benda tegar dengan karakter, Anda bisa mengeluarkannya dari kotak. :)
Jadi hierarki Anda bisa terlihat seperti ini:
- Karakter (memiliki naskah kaku dan skrip kontrol)
- anak (mungkin memiliki colliders)
- cucu (mungkin memiliki colliders)
Pesan OnCollisionEnter akan diaktifkan pada GameObject yang berisi Rigidbody, mencapai skrip kontrol orang tua Anda tanpa perlu menulis skrip relay tambahan untuk menempel pada masing-masing collider.
Jika Anda perlu mencari tahu anak yang bertabrakan dengan Anda yang terlibat dalam tabrakan, Anda dapat melakukannya seperti ini:
void OnCollisionEnter(Collision collision) {
Collider myCollider = collision.contacts[0].thisCollider;
// Now do whatever you need with myCollider.
// (If multiple colliders were involved in the collision,
// you can find them all by iterating through the contacts)
}
Anda dapat dengan mudah memberikan objek teratas kepada anak-anak dan memanggil fungsi langsung di atasnya. Ini menjamin bahwa Anda tidak harus bergantung pada propagasi orang tua. Jadi Anda tidak berakhir melakukan hal-hal konyol seperti
transform.parent.parent
Namun Anda bisa mengotomatiskan proses ini dengan GetComponentInParent . Ini mengambil skrip pertama yang ditemukannya. Kemudian cache itu di objek tabrakan Anda, langsung memanggil fungsi pada objek yang di-cache.
Atau Anda dapat menggunakan UnityEvents (jangan gunakan Pesan) untuk mengikat fungsi ke objek anak. Dengan acara persatuan, Anda dapat menambahkan pendengar yang sewenang-wenang sehingga Anda dapat melakukan lebih dari sekadar memberi tahu objek tingkat atas dari objek anak yang dipukul.
sumber
Kutipan langsung dari Unity Answers (ditulis oleh Ashish Dwivedi ):
sumber
Anda dapat melakukan pemeriksaan pada tabrakan dan melihat kotak hit mana yang terkena dan juga mendapatkan titik dampak jika diperlukan.
catatan: benda tegar ditempatkan pada objek yang sama yang memiliki skrip Collision Check.
Contoh ini memeriksa untuk melihat hitbox mana yang 'proyektil' mengenai target.
sumber