- Home /
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! :)
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
}
}
Rather than checking if something is instantiated, if just use a couple of flags.
Private bool s$$anonymous$$lth, enterS$$anonymous$$lthTriggered, exitS$$anonymous$$lthTriggered;
Then you can build loops like this:
If (!s$$anonymous$$lth && !enterS$$anonymous$$lthTriggered && [looked at object])
{
enterS$$anonymous$$lthTriggered=true;
exitS$$anonymous$$lthTriggered=false;
s$$anonymous$$lth=true;
[Perform s$$anonymous$$lth activation]
}
If (s$$anonymous$$lth && !exitS$$anonymous$$lthTriggered && [looked at object])
{
exitS$$anonymous$$lthTriggered=true;
Interstellar triggered=false;
s$$anonymous$$lth=false;
[Perform s$$anonymous$$lth deactivation]
}
And so on...
Hope that helps.
Answer by DZeb · Apr 18, 2019 at 09:34 PM
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.
Your answer
Follow this Question
Related Questions
Instantiated Bullets Not Picking Up Correct Position/Rotation 2 Answers
Instantiating enemies in spawn points not working on Android Build 0 Answers
Why is it important to create an empty gameobject for my prefabs? 0 Answers
Multiple Buildings Placement 1 Answer
[SOLVED] How can I check what was the last instantiated object? 2 Answers