Si vous utilisez un Rigidbody avec le personnage, vous pouvez le retirer de la boîte. :)
Votre hiérarchie pourrait donc ressembler à ceci:
- Personnage (a Rigidbody et script de contrôle)
- enfant (a peut-être des collisionneurs)
- petit-enfant (a peut-être des collisionneurs)
Les messages OnCollisionEnter se déclencheront sur le GameObject contenant le Rigidbody, atteignant votre script de contrôle parent sans avoir besoin d'écrire un script de relais supplémentaire à coller sur chaque collisionneur.
Si vous avez besoin de savoir lequel de vos enfants collisionneurs a été impliqué dans la collision, vous pouvez le faire comme suit:
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)
}
Vous pouvez simplement passer l'objet supérieur aux enfants et appeler une fonction directement dessus. Cela garantit que vous n'avez pas à vous fier à la propagation parent. Donc vous ne finissez pas par faire des bêtises comme
transform.parent.parent
Vous pouvez cependant automatiser ce processus avec GetComponentInParent . Cela récupère le premier script qu'il trouve. Mettez ensuite cela en cache dans votre objet de collision, appelez directement des fonctions sur ledit objet mis en cache.
Vous pouvez également utiliser UnityEvents (ne pas utiliser de messages) pour lier des fonctions à l'objet enfant. Avec les événements d'unité, vous pouvez ajouter n'importe quel écouteur arbitraire afin que vous puissiez faire plus que simplement notifier l'objet de niveau supérieur de l'objet enfant touché.
la source
Citation directe de Unity Answers (écrite par Ashish Dwivedi ):
la source
Vous pouvez effectuer une vérification de la collision et voir quelle case a été touchée et obtenir le point d'impact si nécessaire.
remarque: le corps rigide est placé sur le même objet que le script Collision Check.
Cet exemple vérifie pour voir quelle hitbox le «projectile» a frappé sur une cible.
la source