Valuta di manipolare i tuoi livelli in fase di esecuzione.
Abilitare / disabilitare le collisioni per determinati oggetti con interi livelli
Physics.IgnoreCollision e Physics.IgnoreLayerCollision consentono di disabilitare le collisioni tra due collider e tra due livelli, rispettivamente.
Se si desidera escludere un collider specifico dalle collisioni, non esiste un modo integrato per farlo. Se si utilizzano corpi rigidi non cinematici con collettori non trigger, ci sarà sempre una risposta anche se si tenta di filtrare le risposte per tag.
Il modo in cui l'abbiamo realizzato nel nostro progetto è stato quello di creare un livello chiamato "Vuoto". Il vuoto non si scontra con nulla.
Ora puoi disabilitare temporaneamente la collisione di un collider impostando il suo livello su "Vuoto" e riattivandolo ripristinando il suo vecchio livello.
Ecco l'essenza:
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;
}
Lo abbiamo fatto specificamente perché abilitare e disabilitare i collider che erano figli di corpi rigidi può davvero rovinare le cose in alcune circostanze. Quindi non è possibile disabilitare in modo affidabile parte di un collisore composto rigido, ma è possibile scambiare in modo affidabile attorno allo strato di una delle parti del collettore composto.
Ora la tua situazione specifica
Per ridurre l'impatto che la collisione di zombi ha sulla tua auto, prendi in considerazione la possibilità di innescare la cinematica dei tuoi zombi o di rendere la loro massa molto piccola (come float.Epsilon), quindi l'impatto non ha alcun effetto sul momento della macchina. All'impatto, puoi anche fare questo interruttore di livello, in modo che le successive collisioni non vengano innescate, anche se la prima applica una forza trascurabile alla carrozzeria.
Potresti anche passare a un livello che non si scontra con la macchina.
Potresti anche mettere un altro collider su zombi che si attivano in caso di razzie. In questo modo è possibile falsificare le forze di impatto OnTriggerEnter. Non puoi essere così preciso con esso, ma puoi approssimare dove le normali di contatto potrebbero essere state abbastanza bene da far divertire lo zombi da qualche parte.
Devi chiederti:
Voglio essere in grado di abbattere gli zombi travolti con la mia macchina o dovrebbero semplicemente riprodurre un'animazione di morte?
Mi interessa se la velocità dell'auto e la velocità angolare sono influenzate in modo minore colpendo gli zombi?