Zwei Physik-Objekte nicht kollidieren, aber Kollisionen in der Einheit
Habe ich ein Unity-Projekt, in dem es ein 2D-Spiel-Welt, die aus statischen Beschleunigern, um die geometrie solide auf die Zeichen, die es bewohnen. Der Spieler ist ein dynamisches collider (mit einem nicht-kinematische Festkörper). Es gibt auch einen gegnerischen Charakter, dass ist auch eine dynamische collider. Beide Figuren bewegen sich über den Boden und stoßen auf Wände, wie ich von Ihnen erwarten würde.
Was ich erreichen will ist, dass die Spieler und Feind sind nicht fest an einander, so dass Sie können Durchlaufen jeweils anderen. Ich erreichte dies, indem Sie den Feind, und die Spieler auf separaten Ebenen und Einstellung der Kollision matrix so, dass diese Schichten nicht miteinander kollidieren. Das problem das ich habe jetzt, jedoch, ist, dass ich tun wollen, um zu erkennen, ob oder nicht der Feind, und der Spieler lief in einander. Ich habe einen trigger-collider, um den Feind Charakter, es ist auf den Feind Schicht, was bedeutet, dass es keine Kollisionen mit dem Spieler.
Ich darüber nachgedacht, ein sub-gameobject für den Feind, legte es auf der Spieler-Ebene, fügen Sie ein Festkörper-und trigger-collider und verwenden, die zum erkennen von Kollisionen zwischen dem Spieler und dem Feind, aber es fühlt sich so verwickelt, dass es macht mich Frage mich, ob es nicht eine elegantere Lösung für dieses.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, müssen Sie erstellen eine untergeordnete
GameObject
, mit einer trigger-collider, und steckte es in eine Ebene, die Interaktion mit der player-Ebene.Nein, müssen Sie nicht fügen Sie ein
Rigidbody
auf die neueGameObject
die Eltern Festkörper ist es bereits eine dynamische collider, so erhalten SieOnTrigger
Veranstaltungen.Als seitliche Anmerkung, nur um die Dinge organisiert, wenn Sie ein Kind des Feindes legen Sie es nicht in der player-Ebene. Zum Beispiel, in der Zukunft, müssen Sie möglicherweise deaktivieren der Spieler-Schicht Kollision mit sich selbst. Darüber hinaus, wenn Ihre Spieler interagiert auf diese Weise mit vielen Objekten, würde ich einen single-trigger auf den Spieler anstatt der Feinde, der auf einem separaten
PlayerTrigger
Schicht, nur um Dinge einfach zu halten.Gibt es nicht eine einfachere Möglichkeit? Nicht wirklich. Sind Sie definitiv müssen die nicht-Interaktion zwischen dem Spieler und Feind-Beschleunigern, aber irgendeine Art der Interaktion zwischen Ihnen zu. So einer von Ihnen muss über zwei Ebenen, oder das ganze wäre die Interaktion beschrieben werden, die durch ein einzelnes bool. Die Physik-engine verarbeitet viele Informationen in einem Rutsch, so dass Sie alle Ebenen und Kollisionen, die Sie wollen, aber während der Physik-Schleife, Sie haben keine weiteren Steuern auf das, was passiert. Sie können nicht sagen, die engine zu ignorieren Kollisionen zwischen zwei Objekten. Mit nur 32 Lagen, und Sie Verhalten sich in der starren, wie Sie tun, sind eigentlich schwere Optimierungen. Wenn Sie besorgt sind, dass die Leistung für die Schaffung einer anderen Schicht, deaktivieren Sie die Interaktion zwischen den Ebenen, die Sie nicht benötigen, wie die trigger-Ebene und der Fußboden und die Wände oder Ebenen, nicht einmal berühren.
Ihre alternative ist, es zu tun alle von code, die auch weniger elegant. Ein einzelnes Kind-Kapsel auf dem player klingt nicht schlecht jetzt, nicht wahr?