/// <summary>
        /// build mesh generator from target
        /// </summary>
        /// <param name="target"></param>
        /// <param name="loader"></param>
        /// <typeparam name="TMeshGenerator"></typeparam>
        /// <returns></returns>
        public TrackMeshGeneratorBuilder <TMeshGenerator, TResult, TrackRideBuilder <TResult> > Generator <TMeshGenerator>(MeshGenerator target, AssetManagerLoader loader)
            where TMeshGenerator : MeshGenerator
        {
            var builder = new TrackMeshGeneratorBuilder <TMeshGenerator, TResult, TrackRideBuilder <TResult> >(this);

            AddStep("MESH_GENERATOR",
                    handler =>
            {
                handler.Target.meshGenerator = ScriptableObject.CreateInstance <TMeshGenerator>();

                handler.Target.meshGenerator.stationPlatformGO   = UnityEngine.Object.Instantiate(target.stationPlatformGO);
                handler.Target.meshGenerator.stationHandRailGO   = UnityEngine.Object.Instantiate(target.stationHandRailGO);
                handler.Target.meshGenerator.material            = target.material;
                handler.Target.meshGenerator.liftMaterial        = target.liftMaterial;
                handler.Target.meshGenerator.frictionWheelsGO    = UnityEngine.Object.Instantiate(target.frictionWheelsGO);
                handler.Target.meshGenerator.supportInstantiator = target.supportInstantiator;
                handler.Target.meshGenerator.crossBeamGO         = UnityEngine.Object.Instantiate(target.crossBeamGO);
                handler.Target.meshGenerator.customColors        = target.customColors;
                handler.Target.meshGenerator.tunnelMeshGenerator = target.tunnelMeshGenerator;
                handler.Target.meshGenerator.lsmFinGO            = target.lsmFinGO;

                loader.HideGo(handler.Target.meshGenerator.frictionWheelsGO);
                loader.HideGo(handler.Target.meshGenerator.crossBeamGO);
                loader.HideGo(handler.Target.meshGenerator.stationHandRailGO);
            });
            return(builder);
        }
        public TrackMeshGeneratorBuilder <TMeshGenerator, TResult, TrackRideBuilder <TResult> > Generator <TMeshGenerator>()
            where TMeshGenerator : MeshGenerator
        {
            var target = new TrackMeshGeneratorBuilder <TMeshGenerator, TResult, TrackRideBuilder <TResult> >(this);

            AddStep("MESH_GENERATOR",
                    handler => { handler.Target.meshGenerator = ScriptableObject.CreateInstance <TMeshGenerator>(); });
            return(target);
        }