Problema coletar diamante Modulo 3 aula Coletar Diamantes

Digitado o mesmo script da aula porém respondeu de maneira diferente segue a imagem do script


Ao roda o jogo estando perto para capturar 1 diamante funciona quase perfeito

Porém na captura do 2 diamante o incremente vai para 3 diamantes

Em pesquisa de internet diz que
" Esse problema ocorre geralmente porque o método OnControllerColliderHit pode ser chamado mais de uma vez no mesmo quadro" desta maneira ele colide mais de uma vez acaba incrementando mais 1 mesmo sendo só um diamante uma das solução que achei foi essa
image
Porém criar uma lista para não incrementa varias vezes não sei dizer se isso é perfomatico ou não, gostaria de saber se teria outro metodo recomendavel do professor ?

3 curtidas

Excelente solução! Utilizar um HashSet garante que a pesquisa ocorra apenas quando a condição hit.gameObject.tag == "Diamante" for verdadeira. Isso torna a abordagem altamente performática, já que a lista será percorrida somente de forma pontual, ou seja, quando o jogador estiver em contato com um diamante.

Outra alternativa eficiente seria criar um script específico e anexar nos diamantes. Nesse script, você pode declarar uma variável booleana:

public bool foiColetado;

E no método de OnControllerColliderHit você poderia colocar:

void OnControllerColliderHit (ControllerColliderHit  other)
{
    if (other.gameObject.tag == "Diamante")
    {
        Diamante diamante = other.gameObject.GetComponent<Diamante>();
        if (!diamante.foiColetado)
        {
            diamante.foiColetado = true;
            diamantesColetados += 1;
            gameObject.SetActive(false);
        }
    }
}
4 curtidas