Betrachten Sie die Bearbeitung Ihrer Ebenen zur Laufzeit.
Aktivieren / Deaktivieren von Kollisionen für bestimmte Objekte mit ganzen Ebenen
Mit Physics.IgnoreCollision und Physics.IgnoreLayerCollision können Sie Kollisionen zwischen zwei Kollidern bzw. zwischen zwei Ebenen deaktivieren.
Wenn Sie einen bestimmten Collider von Kollisionen ausschließen möchten, gibt es keine eingebaute Möglichkeit, dies zu tun. Wenn Sie nicht kinematische Starrkörper mit nicht auslösenden Kollidern verwenden, wird immer eine Antwort angezeigt, auch wenn Sie versuchen, die Antworten nach Tags herauszufiltern.
Wir haben dies in unserem Projekt erreicht, indem wir eine Ebene mit dem Namen "Void" erstellt haben. Void kollidiert überhaupt nicht mit irgendetwas.
Jetzt können Sie die Kollision eines Colliders vorübergehend deaktivieren, indem Sie die Ebene auf "Void" setzen und sie wieder aktivieren, indem Sie die alte Ebene wiederherstellen.
Hier ist das Wesentliche:
int oldLayer = -1;
int voidLayer;
void Start()
{
voidLayer = LayerMask.NameToLayer("Void");
}
void DisableCollider(Collider col)
{
oldLayer = col.gameObject.layer;
col.gameObject.layer = voidLayer;
}
void EnableCollider(Collider col)
{
col.gameObject.layer = oldLayer;
}
Wir haben dies speziell deshalb getan, weil das Aktivieren und Deaktivieren von Collidern, die Kinder von Starrkörpern waren, unter bestimmten Umständen wirklich zu Problemen führen kann. Sie können also einen Teil eines zusammengesetzten Starrkörper-Colliders nicht zuverlässig deaktivieren, sondern den Layer eines der zusammengesetzten Colliderteile zuverlässig vertauschen.
Jetzt deine spezifische Situation
Um die Auswirkungen einer Zombie-Kollision auf Ihr Auto zu verringern, sollten Sie in Betracht ziehen, die kinematischen Starrkörper Ihrer Zombies auszulösen oder ihre Masse auf andere Weise sehr, sehr klein zu machen (wie z. B. float.Epsilon), damit der Aufprall keinen Einfluss auf den Schwung des Autos hat. Beim Aufprall können Sie diesen Ebenenwechsel auch durchführen, damit nachfolgende Kollisionen nicht ausgelöst werden, selbst wenn die erste eine vernachlässigbare Kraft auf die Karosserie ausübt.
Sie können sie sogar auf eine Ebene verschieben, die einfach nicht mit dem Auto kollidiert.
Sie können Zombies, die beim Überfahren aktiviert werden, auch mit einem anderen Collider versehen. Auf diese Weise können Sie Aufprallkräfte OnTriggerEnter vortäuschen. Sie können nicht so genau damit umgehen, aber Sie können schätzen, wo die Kontaktnormalen gut genug waren, um den Zombie irgendwo hin zu werfen, wo es Spaß macht.
Sie müssen sich fragen:
Möchte ich in der Lage sein, die überfahrenen Zombies mit meinem Auto herumzuschlagen, oder sollten sie einfach eine Todesanimation abspielen?
Interessiert es mich, wenn die Geschwindigkeit und die Winkelgeschwindigkeit des Autos durch das Treffen von Zombies in geringerem Maße beeinflusst werden?
Ich vermute, Sie können die Namen der Objekte überprüfen oder den Objektklassen einen Namenswert hinzufügen und dann überprüfen, ob?
Dann haben Sie einfach eine andere Variable, mit der Sie nach Boosting suchen und diese zu den Prüfungen hinzufügen können.
BEARBEITEN: Diese Variable wurde hinzugefügt.
quelle
Ich nehme an, Sie verwenden die Physik-Engine, um die 'Abweichung' automatisch basierend auf Form / Masse zu machen, wenn Dinge zusammenstoßen. Wenn dies der Fall ist, ändern Sie die Masse Ihrer Zombies auf einen sehr minimalen Wert und sie haben keinen Einfluss auf das Auto.
quelle
Hier gibt es zwei Klassen von Antworten:
Hoffe das hilft!
quelle