/// <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; }
/// <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); }
private void ClearTimer() { if (m_Timer != null) { TimerManager.GetInstance().RemoveTimer(m_Timer); m_Timer = null; } }
/// <summary> /// 销毁缓存池管理器 /// </summary> public override void DoDispose() { DoReset(); if (m_CullTimerTask != null) { TimerManager.GetInstance().RemoveTimer(m_CullTimerTask); } m_CullTimerTask = null; m_SpawnDic = null; }
/// <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; } }
/// <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); }
/// <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(); } }
/// <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); } }
protected override void DoInit() { m_CachedTransform = DontDestroyHandler.CreateTransform("PoolManager"); m_CullTimerTask = TimerManager.GetInstance().AddIntervalTimer(m_CullTimeInterval, OnCullTimerUpdate); }