Considera manipular tus capas en tiempo de ejecución.
Habilitar / deshabilitar colisiones para ciertos objetos con capas enteras
Physics.IgnoreCollision y Physics.IgnoreLayerCollision le permiten desactivar las colisiones entre dos colisionadores y entre dos capas, respectivamente.
Si desea excluir un colisionador específico de las colisiones, no hay una forma integrada de hacerlo. Si está utilizando cuerpos rígidos no cinemáticos con colisionadores sin disparador, siempre habrá una respuesta, incluso si intenta filtrar las respuestas por etiqueta.
La forma en que logramos esto en nuestro proyecto fue crear una capa llamada "Void". El vacío no choca con nada en absoluto.
Ahora puede deshabilitar temporalmente la colisión de un colisionador configurando su capa en "Void" y volviendo a habilitarla restaurando su capa anterior.
Aquí está la esencia:
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;
}
Hicimos esto específicamente porque habilitar y deshabilitar colisionadores que eran hijos de cuerpos rígidos realmente puede arruinar las cosas en algunas circunstancias. Por lo tanto, no puede deshabilitar de manera confiable parte de un colisionador compuesto de cuerpo rígido, pero puede intercambiar confiablemente alrededor de la capa de una de las partes del colisionador compuesto.
Ahora tu situación específica
Para reducir el impacto que tiene la colisión de zombis en tu auto, considera hacer que tus zombies sean los disparadores cinemáticos de cuerpo rígido, o de lo contrario hacer que su masa sea muy pequeña (como flotador, Epilon), por lo que el impacto tiene un efecto cero en el impulso del auto. En el impacto, también puede hacer este cambio de capa, para que no se activen colisiones posteriores, incluso si la primera aplica una fuerza insignificante a la carrocería del automóvil.
Incluso podría cambiarlos a una capa que simplemente no choque con el automóvil.
También podría poner otro colisionador sobre zombies que se activan en el atropello. De esta manera, puedes falsificar las fuerzas de impacto en OnTriggerEnter. No puede ser tan preciso con eso, pero puede aproximarse a dónde las normales de contacto pueden haber sido lo suficientemente buenas como para lanzar al zombi a un lugar divertido.
Tienes que preguntarte a ti mismo:
¿Quiero poder golpear a los zombis atropellados con mi coche, o deberían simplemente reproducir una animación de muerte?
¿Me importa si la velocidad del automóvil y la velocidad angular se ven afectadas de manera más pequeña al golpear a los zombis?