コード例 #1
0
        /// <summary>
        /// 销毁缓存池
        /// </summary>
        internal void DestroyPool()
        {
            completeCallback = null;
            if (m_PreloadTimerTask != null)
            {
                TimerManager.GetInstance().RemoveTimer(m_PreloadTimerTask);
                m_PreloadTimerTask = null;
            }

            m_UsedItemList.Clear();

            for (int i = m_UnusedItemQueue.Count - 1; i >= 0; i--)
            {
                UnityObject.Destroy(m_UnusedItemQueue.Dequeue());
            }
            m_UnusedItemQueue.Clear();

            if (m_TemplateType == PoolTemplateType.PrefabInstance || m_TemplateType == PoolTemplateType.RuntimeInstance)
            {
                UnityObject.Destroy(m_InstanceOrPrefabTemplate);
            }

            m_AssetPath = null;
            m_SpawnPool = null;
            m_InstanceOrPrefabTemplate = null;
            IsAutoClean = false;
        }
コード例 #2
0
ファイル: AssetBundleLoader.cs プロジェクト: fqkw6/AssetTool
        /// <summary>
        /// 初始化
        /// </summary>
        /// <param name="rootDir">根路径</param>
        protected override void InnerInitialize(string rootDir)
        {
            m_AssetRootDir = rootDir;
            // if (!string.IsNullOrEmpty(m_AssetRootDir) && !m_AssetRootDir.EndsWith("/"))
            // {
            //     m_AssetRootDir += "/";
            // }
            m_AssetRootDir += "/";
            //开辟清除无效资源定时器
            m_AssetCleanTimer = TimerManager.GetInstance().AddIntervalTimer(m_AssetCleanInterval, this.OnCleanAssetInterval);

            //加载全局manifest
            // string manifestPath = $"{this.m_AssetRootDir}/{AssetBundleConst.ASSETBUNDLE_MAINFEST_NAME}";
            string manifestPath = this.m_AssetRootDir + AssetBundleConst.ASSETBUNDLE_MAINFEST_NAME;

            Debug.LogError(manifestPath);
            AssetBundle manifestAB = AssetBundle.LoadFromFile(manifestPath);

            Debug.LogError(manifestAB);
            m_AssetBundleManifest = manifestAB.LoadAsset <AssetBundleManifest>("AssetBundleManifest");
            // AB释放掉
            manifestAB.Unload(false);

            //加载资源打包配置数据
            string      assetAddressConfigPath = this.m_AssetRootDir + AssetAddressConfig.CONFIG_ASSET_BUNDLE_NAME;
            AssetBundle assteAddressConfigAB   = AssetBundle.LoadFromFile(assetAddressConfigPath);

            m_AssetAddressConfig = assteAddressConfigAB.LoadAsset <AssetAddressConfig>(AssetAddressConfig.CONFIG_PATH);
            assteAddressConfigAB.Unload(false);
        }
コード例 #3
0
 private void ClearTimer()
 {
     if (m_Timer != null)
     {
         TimerManager.GetInstance().RemoveTimer(m_Timer);
         m_Timer = null;
     }
 }
コード例 #4
0
 /// <summary>
 /// 销毁缓存池管理器
 /// </summary>
 public override void DoDispose()
 {
     DoReset();
     if (m_CullTimerTask != null)
     {
         TimerManager.GetInstance().RemoveTimer(m_CullTimerTask);
     }
     m_CullTimerTask = null;
     m_SpawnDic      = null;
 }
コード例 #5
0
        /// <summary>
        /// 使用定时器进行预加载结束
        /// </summary>
        private void OnPoolComplete()
        {
            completeCallback?.Invoke(m_SpawnPool.PoolName, m_AssetPath);
            completeCallback = null;

            if (m_PreloadTimerTask != null)
            {
                TimerManager.GetInstance().RemoveTimer(m_PreloadTimerTask);
                m_PreloadTimerTask = null;
            }
        }
コード例 #6
0
        /// <summary>
        /// 初始化缓存池
        /// </summary>
        /// <param name="pool">所有的分组</param>
        /// <param name="aPath">唯一标识,一般以资源路径为值</param>
        /// <param name="templateGObj">模板</param>
        /// <param name="templateType">模板类型</param>
        internal void InitPool(SpawnPool pool, string aPath, GameObject templateGObj, PoolTemplateType templateType)
        {
            m_SpawnPool = pool;
            m_AssetPath = aPath;

            m_InstanceOrPrefabTemplate = templateGObj;
            this.m_TemplateType        = templateType;

            if (templateType != PoolTemplateType.Prefab)
            {
                m_InstanceOrPrefabTemplate.SetActive(false);
                m_InstanceOrPrefabTemplate.transform.SetParent(pool.CachedTransform, false);
            }

            m_PreloadTimerTask = TimerManager.GetInstance().AddIntervalTimer(0.05f, OnPreloadTimerUpdate);
        }
コード例 #7
0
        /// <summary>
        /// 停止播放特效并在播放停止后回收
        /// </summary>
        /// <param name="immediately"></param>
        public void StopAndRecycleFX(bool immediately = true)
        {
            StopFX(immediately);

            ClearTimer();

            m_AutoDestroyWhenNotExistLivingParticles = true;

            if (m_VFXController != null && m_VFXController.DestroyDelay > 0)
            {
                m_Timer = TimerManager.GetInstance().AddEndTimer(m_VFXController.DestroyDelay, TimeToAutoDestroy);
            }
            else
            {
                RecycleFX();
            }
        }
コード例 #8
0
        /// <summary>
        /// 触发事件
        /// </summary>
        /// <param name="eventID">事件ID号</param>
        /// <param name="delayTime">事件触发延迟时长,为0表示立即触发</param>
        /// <param name="datas">事件携带参数</param>
        public void TriggerEvent(int eventID, float delayTime, params object[] datas)
        {
            GameEvent e = eventPool.GetItem();

            e.SetEvent(eventID, delayTime, datas);

            if (e.EventDelayTime <= 0)
            {
                TriggerEvent(e);
            }
            else
            {
                //使用时间轮来管理事件触发
                TimerTaskInfo taskInfo = TimerManager.GetInstance().AddTimerTask(delayTime, delayTime, null, null, OnDelayEventTrigger, e);
                delayEventTaskInfo.Add(e, taskInfo);
            }
        }
コード例 #9
0
 protected override void DoInit()
 {
     m_CachedTransform = DontDestroyHandler.CreateTransform("PoolManager");
     m_CullTimerTask   = TimerManager.GetInstance().AddIntervalTimer(m_CullTimeInterval, OnCullTimerUpdate);
 }