Considere manipular suas camadas em tempo de execução.
Ativando / desativando colisões para determinados objetos com camadas inteiras
Physics.IgnoreCollision e Physics.IgnoreLayerCollision permitem desativar colisões entre dois colididores e entre duas camadas, respectivamente.
Se você deseja excluir um colisor específico das colisões, não há como criar isso. Se você estiver usando corpos rígidos não cinemáticos com coletores sem gatilho, sempre haverá uma resposta, mesmo se você tentar filtrar as respostas por tag.
A maneira como realizamos isso em nosso projeto foi criar uma camada chamada "Vazio". O vácuo não colide com nada.
Agora você pode desativar temporariamente a colisão de um colisor, definindo sua camada como "Vazio" e reativá-lo restaurando sua camada antiga.
Aqui está a essência:
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;
}
Fizemos isso especificamente porque habilitar e desabilitar colisores filhos de corpos rígidos pode realmente estragar tudo em algumas circunstâncias. Portanto, você não pode desativar com segurança parte de um colisor de corpo rígido composto, mas é possível alternar com segurança a camada de uma das partes do colisor composto.
Agora sua situação específica
Para reduzir o impacto que a colisão de zumbis causa no seu carro, considere fazer com que os corpos rígidos cinemáticos dos zumbis sejam acionados ou diminua sua massa muito, muito pequena (como o float.Epsilon), para que o impacto tenha efeito nulo no momento do carro. No impacto, você também pode fazer essa troca de camada, para que as colisões subsequentes não sejam acionadas, mesmo que a primeira aplique uma força desprezível à carroceria do carro.
Você pode até trocá-los para uma camada que simplesmente não colide com o carro.
Você também pode colocar outro colisor nos zumbis que são ativados no atropelamento. Dessa forma, você pode fingir que o OnTriggerEnter é forçado a impactar. Você não pode ser tão preciso com isso, mas pode aproximar-se de onde os normais de contato podem ter sido bons o suficiente para jogar o zumbi em algum lugar divertido.
Você deve se perguntar:
Eu quero ser capaz de nocautear os zumbis atropelados com o meu carro, ou eles devem apenas tocar uma animação da morte?
Eu me importo se a velocidade do carro e a velocidade angular são afetadas de maneiras menores ao atingir zumbis?
Suponho que você possa verificar os nomes dos objetos ou adicionar um valor de nome às classes de objetos e verificar isso?
Depois, basta ter outra variável que você pode usar para verificar o aumento e adicionar isso às verificações.
EDIT: adicionada esta variável em.
fonte
Suponho que você esteja usando o mecanismo de física para fazer o 'desvio' automaticamente com base na forma / massa quando as coisas colidem. se for esse o caso, altere a massa de seus zumbis para um valor muito mínimo e eles não afetarão o carro.
fonte
Existem duas classes de respostas aqui:
Espero que isto ajude!
fonte