How to instantiate once when boolean changes

Hello! I’m new to scripting and I have a quick question: In my game, the opponent can turn invisible by looking at the boolean: “isStealthed”. What I want is when the opponent turns invisible, it instantiates a gameobject once. And when it turns back to visible, it instantiates a gameobject again.

I have tried using a private boolean “instantiatedParticle” to make it play only once. But when I try it, it instantiates once and then it just stops working. Any help would be appreciated! Thanks! :slight_smile:

    private void CheckOpponentStealth()
    {
        SkinnedMeshRenderer meshRenderer = GetComponentInChildren<SkinnedMeshRenderer>();
        if (IsStealthed)
        {
            if (meshRenderer != null)
            {
                meshRenderer.enabled = false; //this line makes the opponent invisible
                if(!instantiatedParticle)
                {
                    GameObject player = PhotonView.Instantiate(stealthParticle, transform.position, transform.rotation);
                    instantiatedParticle = true;
                }
            }
        }
        else
        {
            if (meshRenderer != null)
            {
                meshRenderer.enabled = true;
                meshRenderer.material =  standardMaterial;
//this makes the opponent visible
            }
        }

You have to reset your instantiatedParticle variable back to false at some point, otherwise it will never be able to get inside the if statement again. If the CheckOpponentStealth() is executed often (e.g. Inside an update), this should fix it:

         else
         {
             if (meshRenderer != null)
             {
                 meshRenderer.enabled = true;
                 meshRenderer.material =  standardMaterial;
 //this makes the opponent visible
                 instantiatedParticle = false;
             }
         }

Otherwise you need to “instantiatedParticle = false;” at the function that changes your IsStealthed.