Wenn Sie einen starren Körper mit dem Charakter verwenden, können Sie diesen sofort einsatzbereit machen. :) :)
Ihre Hierarchie könnte also so aussehen:
- Charakter (hat Rigidbody und Kontrollskript)
- Kind (hat vielleicht Collider)
- Enkel (hat vielleicht Collider)
OnCollisionEnter-Nachrichten werden auf dem GameObject mit dem Rigidbody ausgelöst und erreichen Ihr übergeordnetes Steuerungsskript, ohne dass Sie ein zusätzliches Relay-Skript schreiben müssen, um auf jedem Collider zu bleiben.
Wenn Sie herausfinden möchten, welcher der Kollider Ihres Kindes an der Kollision beteiligt war, können Sie dies folgendermaßen tun:
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)
}
Sie können das oberste Objekt einfach an die untergeordneten Objekte übergeben und eine Funktion direkt darauf aufrufen. Dies garantiert, dass Sie sich nicht auf die Weitergabe durch Eltern verlassen müssen. Sie machen also keine dummen Dinge wie
transform.parent.parent
Sie können diesen Prozess jedoch mit automatisieren GetComponentInParent . Dadurch wird das erste gefundene Skript abgerufen. Speichern Sie dann das Cache in Ihrem Kollisionsobjekt und rufen Sie direkt Funktionen für das zwischengespeicherte Objekt auf.
Alternativ können Sie UnityEvents verwenden (keine Nachrichten verwenden), um Funktionen an das untergeordnete Objekt zu binden. Mit Unity-Ereignissen können Sie einen beliebigen Listener hinzufügen, sodass Sie mehr tun können, als nur das Objekt der obersten Ebene über das getroffene untergeordnete Objekt zu benachrichtigen.
quelle
Direktes Zitat aus Unity Answers (geschrieben von Ashish Dwivedi ):
quelle
Sie können die Kollision überprüfen und feststellen, welches Trefferfeld getroffen wurde, und bei Bedarf auch den Aufprallpunkt ermitteln.
Hinweis: Der starre Körper befindet sich auf demselben Objekt wie das Collision Check-Skript.
In diesem Beispiel wird überprüft, welche Trefferbox das 'Projektil' auf ein Ziel getroffen hat.
quelle