public EveryFrameUpdateManager GetEveryFrameUpdateList(UpdateSourceType sourceType, bool scaledTime)
        {
            var managerDescription = FindManagerDescription(_everyFrameUpdateList, sourceType, scaledTime);

            if (managerDescription == null)
            {
                string     scaledName = scaledTime ? "Scaled" : "Unscaled";
                GameObject go         = CreateUpdateSource(sourceType, $"EveryFrame_{scaledName}");
                managerDescription = new UpdateManagerDescription
                {
                    sourceType    = sourceType,
                    scaledTime    = scaledTime,
                    updateManager = go.GetComponent <UpdateManagerSourceBase>().InitForEveryFrame(scaledTime)
                };
                _everyFrameUpdateList.Add(managerDescription);
            }
            return(managerDescription.updateManager as EveryFrameUpdateManager);
        }
        public CountFrameUpdateManager GetCountFrameUpdateList(int count, UpdateSourceType sourceType, bool scaledTime)
        {
            if (!_countFrameUpdateLists.TryGetValue(count, out List <UpdateManagerDescription> updateList))
            {
                updateList = new List <UpdateManagerDescription>();
                _countFrameUpdateLists.Add(count, updateList);
            }
            var managerDescription = FindManagerDescription(_everyFrameUpdateList, sourceType, scaledTime);

            if (managerDescription == null)
            {
                string     scaledName = scaledTime ? "Scaled" : "Unscaled";
                GameObject go         = CreateUpdateSource(sourceType, $"CountFrame_{scaledName}_{count}");
                managerDescription = new UpdateManagerDescription
                {
                    sourceType    = sourceType,
                    scaledTime    = scaledTime,
                    updateManager = go.GetComponent <UpdateManagerSourceBase>().InitForCountFrame(scaledTime, count)
                };
                updateList.Add(managerDescription);
            }
            return(managerDescription.updateManager as CountFrameUpdateManager);
        }
        public TimedUpdateManager GetTimedUpdateList(float time, UpdateSourceType sourceType, bool scaledTime)
        {
            if (!_timedUpdateLists.TryGetValue(time, out List <UpdateManagerDescription> updateList))
            {
                updateList = new List <UpdateManagerDescription>();
                _timedUpdateLists.Add(time, updateList);
            }
            var managerDescription = FindManagerDescription(_everyFrameUpdateList, sourceType, scaledTime);

            if (managerDescription == null)
            {
                string     scaledName = scaledTime ? "Scaled" : "Unscaled";
                GameObject go         = CreateUpdateSource(sourceType, $"Timed_{scaledName}_{time}");
                managerDescription = new UpdateManagerDescription
                {
                    sourceType    = sourceType,
                    scaledTime    = scaledTime,
                    updateManager = go.GetComponent <UpdateManagerSourceBase>().InitForTimed(scaledTime, time)
                };
                updateList.Add(managerDescription);
            }
            return(managerDescription.updateManager as TimedUpdateManager);
        }