Una delle situazioni più difficili da gestire in Unity è quando si ha un oggetto composto da diversi figli i quali hanno colliders e/o rigidbody associati. In tal caso è difficile monitorare quale collider ha generato gli eventi oppure se più collider concorrono a farlo.
Va detto subito: i collider dei figli di un oggetto con anch’esso un collider NON contribuiscono direttamente all’invocazione di OnCollisionEnter e gli altri eventi di collisione sull’oggetto padre. Ci sono però alcune particolarità da tenere in considerazione:
RigidBody sull’oggetto padre:
- Se un Rigidbody è presente sull’oggetto padre, e i collider sono distribuiti tra il padre e i figli, tutti i collider saranno considerati come un unico corpo rigido.
- In questo caso, qualsiasi collisione che coinvolge uno dei collider (sia del padre che dei figli) invoca tutti gli eventi OnCollisonEnter, OnCollisionStay e OnCollisionExit sugli script collegati al Rigidbody, che tipicamente è presente sul padre.
- Rigidbody sui figli:
- Se i figli hanno un Rigidbody proprio, essi saranno trattati come entità separate. Le collisioni sui figli invocano gli eventi SOLO sugli script presenti su quei figli specifici.
- Il Rigidbody sul padre non riceverà gli eventi di collisione dei figli con un proprio Rigidbody.
- Nessun Rigidbody presente ma solo Collider:
- Se né il padre né i figli hanno un Rigidbody allora i collider agiranno come statici. In tal caso gli eventi di collisione non saranno MAI invocati a meno che l’altro oggetto nella collisione non abbia un Rigidbody.
A questo link trovate un nostro approfondimento su come evitare eventi di doppie collisioni tra padre e figli in Unity.