Exemplo n.º 1
0
        /// <summary>
        /// 直接回收特效
        /// 会立即停止当前特效的播放, 并把特效回收,放入池子中。
        /// 调用这个方法后,外部对于特效的引用(EffectController)将不再可用。所以这个方法调用后需要将特效的引用赋空
        /// </summary>
        public void RecycleFX()
        {
            if (m_DestroyedUnsafe)
            {
                return;
            }

            if (m_Status == EffectStatus.Recycled)
            {
                return;
            }

            if (m_AssetLoadHandler != null && m_VFXController == null)
            {
                AssetUtil.UnloadAssetLoader(m_AssetLoadHandler);
            }

            StopFX(true);

            OnEffectFinished?.Invoke(this);
            OnEffectFinished = delegate(EffectController e)
            {
            };

            ClearTimer();
            m_Status = EffectStatus.Recycled;

            // 暂时使用老的缓存池。 等李玉斌移植完毕
            //effect.GetEffectObject()?.ReleaseItem();
            if (m_VFXController != null)
            {
                m_VFXController.RecycleFX();
                m_VFXController.transform.SetParent(null, false);
                m_VFXController.Recycle();
                m_VFXController = null;
            }
            else
            {
                DebugUtility.LogFormat("EffectBug", "null VFXController. name: ", GetVFXAssetName());
            }

            ReleaseItem();
        }