0
votes

Ne pas respecter si la déclaration

J'ai ce code censé disparaître le cube jaune rotatif une fois que la balle déclenche la collision.
Mais une fois que l'alpha atteint 0 fort>, il continue une fois de plus jusqu'à ce que l'alpha atteigne -0,200 strong> et le cube devient bleu avant de disparaître.

if (disapear)
{
    if (rndr.material.color.a > 0.0f)
    {
        rndr.material.color -= new Color(0, 0, 0, 0.2f);
        Debug.Log(rndr.material.color);
    }
    else
    {
        gameObject.SetActive(false);
    }
}


5 commentaires

Je n'ai pas salué avec l'unité, mais vous pouvez essayer de mettre un point de pause à l'intérieur si et de voir ce que rndr.material.color.a évalue, cela peut vous donner une idée sur la façon de résoudre le problème.


En outre, l'erreur de la syntaxe de balises signifierait que l'application ne s'exécutera pas, il s'agit d'une erreur d'exécution.


J'ai trouvé 2,980232e-08 comme valeur de l'alpha avant de devenir -0,200, qu'est-ce que cela signifie?


Ce nombre est supérieur à 0, je penserais que vous pouvez utiliser la réponse de Darcevader pour résoudre ce problème (en fonction de ce que vous faites, vous voudrez peut-être vérifier> = 0.2f).


il pourrait être l'alpha est contraignant entre 0 et 1 de sorte qu'il ne devient jamais vraiment inférieur à 0 et que vous obtenez heureusement un pépin de moins de 0. Il est probable que la valeur est de la pince si au-dessous de 0, il devient exactement 0. Vous pouvez essayer de comparer avec <= 0 à la place.


3 Réponses :


1
votes

Ceci est probable parce que la valeur de l'alpha quand il se rapproche de 0f peut ne pas être exactement 0 (c'est-à-dire 0.0000001> 0,0f), je ferais votre booléen être si (rndr.material.color.a> 0.2f) ou définissez la valeur alpha sur 0 sous elener


0 commentaires

0
votes

La valeur 2.980232e-08 est inférieure à la machine Epsilon voir https://fr.wikipedia.org / Wiki / Machine_epsilon pour un flotteur.

Le plus certainement, il s'est arrosé lors de la soustraction successive de 0,2f de 1,0f (5 fois). Plus probablement 1.0f -5.0f * 0.2F ~ 2.980232e-08F P>

Par conséquent, vous devez modifier la façon dont vous implémentez la fonction, ajoutez peut-être un incrément_to_disappear code> (int) Code> avec votre Désapacité code> Propriété: P>

if (disapear)
{
    if (increment_to_disappear < 5)
    {
        rndr.material.color -= new Color(0, 0, 0, 0.2f);
        increment_to_disappear++;
    }
    else
    {
        gameObject.SetActive(false);
    }

}


0 commentaires

2
votes

Ceci arrive en raison de Precision de point flottant unique .

= = = > Ne comparez jamais deux float directement.


Vous devez utiliser par exemple mathf.approxement xxx < / p>


1 commentaires

Toutes les réponses publiées ici sont techniquement correctes, mais ceci est la solution préférée, comme l'unité mathf.approxement fait la comparaison pour vous à l'aide d'une valeur Epsilon que vous n'avez pas à vous inquiéter.