Looking to spawn resources after resources are depleted

I have a resource gathering system that is working well but I need to expand it a bit. Currently I just have a resource like a tree that I place in the world through the editor, but I would like to spawn a new instance of the tree a few seconds after the initial tree has been harvested. I have a Roots object that will be placed in the world and that will do the spawning for me.

I don’t have any issues spawning, that part has been easy thankfully. My big question is: how can I check if the Tree I have spawned is still in the world and if its not start a cooldown timer? Would it be an Update function that I put on the Roots game object or would I send a message from the Tree to tge Roots when it gets harvested? In eitger case, how do I make this work in multiplayer?

In a script attached to the tree object, you can call OnDestroy (Unity - Scripting API: MonoBehaviour.OnDestroy()), and inside of that you can perhaps call a method in the roots script that spawns the tree after x seconds

That could definitely work! Is there a way to designate which Roots object is calling thw function? If the Tree is destroyed, I want the same Roots object that spawned it to be the Roots object that starts its own cooldown. I assume I would need to find the network id of the Roots object and send that to the spawned Tree?

I would just have a public variable for the roots object on the tree script. And in the tree spawning part on the root script, do tree.Root = this;

Alternatively, can I simply deactivate/disable the game object then after a few seconds reactivate the object and reset its values? Essentially it will look like it is respawning but I think it would be more efficient (I don’t actually know I am just curious) Is it better to disable/enable or to destroy/spawn?

If I did go such a route, when expanding to things like enemies which will move around, how would I got about moving the enemy object back to the place it started? I would have the enemy spawned in at game start from an empty game object, can I reference the same game object as the transform location to move it back to?

So I put the OnDestroy () function on my Tree script, but since it is an object that will be spawned into my game how do I reference the Roots object that spawned it? If I can tell the Roots that the tree has been destroyed then I can spawn a new Tree.