Ich habe zwei Kollisionsboxen auf demselben GameObject. Ich möchte nicht, dass die Kollisionsboxen Auslöser sind. Ich möchte die Kollisionsboxen auf dem eigentlichen GameObject haben, nicht seine Kinder.
Zum Beispiel, wenn ich nach einem Headshot suchen möchte. Mein Grund, keine Trigger zu wollen, ist, dass bereits ein Trigger verwendet wird. Mein Grund, keine Kinder zu wollen, ist die Sauberkeit. Ich verstehe, dass es Workarounds gibt. Ich habe mich gefragt, ob es einen direkteren Ansatz gibt.
Wie kann ich bei einer Kollision überprüfen, welche Kollisionsbox getroffen wurde?
unity
collision-detection
Evorlor
quelle
quelle
Antworten:
Ich kenne einen Weg, dies zu tun, wenn Sie Ihre Collider programmgesteuert erstellt haben. Siehe folgenden Quellcode:
Wenn Sie dies also auf diese Weise tun, erhalten Sie die von Ihnen angegebenen Anforderungen. Dadurch kann ein Spielobjekt mehrere Collider enthalten, ohne dass jedes ein untergeordnetes Objekt sein muss.
Es kann Ihnen auch sagen, welcher Collider getroffen wurde.
Lassen Sie mich wissen, wenn Sie Fragen zu dieser Implementierung haben.
quelle
Ich würde empfehlen, ein leeres Spielobjekt zu erstellen, das beide Spielobjekte für den gesamten Feind und ein zweites für den Kopf enthält. Dann könnten Sie einen Scheck schreiben, der auf der Kugel basiert, die sich mit dem Kopf schneidet, und von dort aus gehen.
quelle
Wenn Sie nur ein GameObject für Ihren Charakter haben möchten, können Sie Ihrem GameObject nicht mehrere Collider desselben Typs hinzufügen und haben dennoch die Möglichkeit, auf alle in Ihren Skripten zuzugreifen (nur die ersten in der Reihenfolge der Komponenten sind verfügbar). Sie können jedoch mehrere Collider unterschiedlicher Typen hinzufügen, ohne die Zugänglichkeit zu beeinträchtigen. In Ihrem Fall können Sie CapsuleCollider oder BoxCollider für den Körper und einen SphereCollider für den Kopf hinzufügen. Das Skript für den Zugriff auf diese Collider lautet wie folgt:
Dieses Skript wird an Ihre Kugel angehängt (stellen Sie sicher, dass Sie auch einen Trigger Collider hinzufügen). Die OnTriggerEnter-Methode prüft, ob ein Collider in den Trigger Collider des Aufzählungszeichens eingegeben wurde. Die if-Anweisungen prüfen, welcher Collider den Trigger Collider eingegeben hat. Problem gelöst.
Lassen Sie mich wissen, wenn Sie Fragen oder Anregungen haben.
quelle
Nach einigen Recherchen habe ich einen einfachen Weg gefunden, dies ohne Problemumgehungen zu tun.
Verwenden Sie beim Erstellen von Collidern jeweils unterschiedliche Namen wie Kopf, Rumpf, Beine, Arme. Bei der OnCollisionEnter-Methode mussten Sie lediglich alle Kontaktpunkte überprüfen.
quelle