Start() sometimes isn't called when object is set active

I have a projectile which launches itself on Start(). Via an object pool, the projectile game object is set inactive until it needs to be used, at which point it is placed in the correct position and orientation and then set active. At this point the Start method of the projectile’s script should cause the projectile to move forward but sometimes it just…doesn’t. I’ve verified with a Debug.log that the start method just sometimes doesn’t fire.


That being said, there seems to be a correlation between when the projectile does and doesn’t move and the movement of the thing spawning it.


If I don’t use the object pool and just instantiate a new object it works. Like I said, I’ve used a Debug.Log to check if start is being called when the projectile doesn’t move and it isn’t. The script itself is enabled and is never disabled directly, only the object it’s attached to is set active or inactive.

Okay so the issue is I misunderstood the Unity documentation which was, to be fair, easily misunderstood. The documentation on Start says that start is called after activeSelf is set to true. The problem is it’s not called every time activeSelf is set to true, only the first time.

I should be using OnEnabled instead.