Home > Back-end >  Stop onDestroy on Scene Load.Unity 2d
Stop onDestroy on Scene Load.Unity 2d

Time:09-07

So I have a script that adds money when enemy dies (onDestroy). But when the scene changes that also destroys the enemies and adds money. How I can make it only add money when enemy is destroyed by health=0 and not on scene change? Code:

void onDestroy()
{
AddCoins(Coins);
}

CodePudding user response:

I can see two main ways to do this :

  • If it's possible, call the AddCoins Method in the code that calls Destroy() when health =0 instead of in OnDestroy(). Something like :
    if(health = 0){
       AddCoins(coins);
       Destroy(gameObject);
    }

and no OnDestroy method.

  • Otherwise, you could set a variable to true just before loading a new scene, and in OnDestroy() check if this variable is false, and only then adding coins.

If it's compatible with your game, I would recommend for the first solution, much cleaner in my opinion.

CodePudding user response:

You can use scene.isLoaded to only check the times when the scene is loaded and is not changing.

void OnDestroy()
{
    if(gameObject.scene.isLoaded)
    {
        AddCoins(Coins);     
    }
}

CodePudding user response:

I would make it so that the AddCoin() method gets called not on destroy but instead have a check either in the update loop or ideally in your enemy damage function so it gets called only when health changes.

void Update()
{
   if(health == 0)
   {
      AddCoins(Coins)
   }
}

if you want to use your existing code structure and still have it be called onDestory you could add another check

void onDestroy()
{
   if(health == 0)
   {
     AddCoins(Coins);
   }

}
  • Related