GameObjects Instatiated from existing GameObjects sometimes get skipped and are not apart of the update loop.

I am making a tower defense game and certain ammunition I would like to split into multiple copies of itself on impact with an enemy. Everything works fine but randomly, the instantiated copies do not get Start or Update called.

Some Observations:

  1. I added a bool to print debug logs from the update. When I notice the projectiles are not moving. I tried pausing and checking that bool and nothing happens.

  2. I have their name changed in the Start method and their name remains “Parent’s name” (Clone).

  3. Their OnTriggerEnter gets called correctly.

            // Sometimes Doesn't get called
            protected override void Start()
            {
                name = "Rocket " + id;
                id++;
                base.Start();
                if (IsPreview) {_behavior = base.Update; }
            }
    
            // Sometimes doesn't get called
            protected override void Update()
            {
                if (_debug) { Debug.Log("Debug");}
               transform.localPosition += transform.forward * (Speed * Time.deltaTime);
            }
            
            void OnTriggerEnter(Collider other)
            {
                Enemy enemy = other.GetComponent<Enemy>();
                if (!enemy) return;
                if(_canCluster)
                {
                    Cluster();
                }
                DamageEnemy(ref enemy);
                Destroy(gameObject);
            }
    
            void Cluster()
            {
                Projectile[] clusters = new Projectile[_clusters];
                float pies = 360f / _clusters;
                for (int i = 0; i < clusters.Length; i++ )
                {
                    clusters *= Instantiate(this);*
    

//Change rotation of each child Projectile to face equally angled away from spawn point. AKA scatter.
Vector3 forward = transform.eulerAngles;
forward.y = (pies * i) + forward.y;
clusters*.transform.eulerAngles = forward;*
}
}

I believe it has something to do with destroying and instantiated from the same reference in the same frame. I fixed it by delaying the destruction for 0.2 seconds.