Awake called after I activate object, not after Instantiate... is it normal??

As it documented, Awake should be called just after I instantiate object from prefab, and Start - after i activate object (before first Update), right?

I instantiate a Fighter object from prefab. It contains an inactive children in it:

Fighter/Explosion - inactive at instantiation time, activated when Fighter dying.

Fighter/Bullet - a pool of Bullet objects, all of they inactive at beginning.

each Bullet has an inactive child Bullet/Explosion - it activated when bullet hits some obstacle.

So, for each objects in this hierarchy an Awake is called when I instantiate a Fighter object, and Start is called for every object just when I activate this object.

But, Awake for Fighter/Bullet/Explosion is called… after I activated a Bullet and Explosion (when this Explosion became active in hierarchy), not directly after instantiation of all Fighter objects structure.

Is this behavior normal?? Is there some documented cases when (and why) it really should be so?

Thanks in advance.

If a GameObject is inactive during start up , Awake is not called until it is made active, or an Unity lifetime function in any script attached to it is called. (OnEnable, OnCollisionEnter)

Nonetheless, the Unity Manual says that “However, Awake is called when the script object is initialised, regardless of whether or not the script is enabled. Start may not be called on the same frame as Awake if the script is not enabled at initialisation time.”

Where is the truth?

PS through a little refactoring this question doesnt have practically value for me now, but I really want to understand :slight_smile: