public void ForEachGameObject(ForEachGameObjectWithChildrentDelegate callback)
    {
        var lookup = GetLookup(rootBundles);

        foreach (var kvp in lookup)
        {
            currentEgoComponent = kvp.Key;
            var bundle = kvp.Value as EgoBundle <C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12>;
            callback(
                currentEgoComponent,
                bundle.component1,
                bundle.component2,
                bundle.component3,
                bundle.component4,
                bundle.component5,
                bundle.component6,
                bundle.component7,
                bundle.component8,
                bundle.component9,
                bundle.component10,
                bundle.component11,
                bundle.component12,
                childConstraint as CS1
                );
        }
    }
    public void ForEachGameObject(ForEachGameObjectWithChildrentDelegate callback)
    {
        var lookup = GetLookup(rootBundles);

        foreach (var kvp in lookup)
        {
            currentEgoComponent = kvp.Key;
            var bundle = kvp.Value as EgoBundle <C1>;
            callback(
                currentEgoComponent,
                bundle.component1,
                childConstraint as CS1
                );
        }
    }