Пример #1
0
        /// <summary>
        /// 加载完成后设置特效Object, 并把当前的特效状态更新给特效Object
        /// 这个函数设置为public是为了给特效浏览器使用 (SkillEffectBrowser).
        /// 除此之外, 外部不应该调用这个方法
        /// </summary>
        /// <param name="effect"></param>
        public void _SetEffectAndUpdateEffectStatus(VFXController effect)
        {
            m_VFXController = effect;
            m_VFXController.CachedTransform.SetParent(CachedTransform, false);
            m_VFXController.SetEffectController(this);

            ReplayOperationsCached();

            if (m_Status == EffectStatus.Playing)
            {
                m_StartTime = Time.time;
                m_VFXController.PlayFX(m_ForMainPlayer);

                LayerUtil.SetGameObjectToLayer(gameObject, GameConstant.LayerTypeID.TransparentFX, true);
            }
            else if (m_Status == EffectStatus.Stop)
            {
                ClearTimer();
                m_VFXController.StopFX(true);
            }
            else if (m_Status == EffectStatus.Recycled)
            {
                // OnEffectLoadComplete里已经处理了
                //	m_VFXController.StopFX(true);
                //	m_VFXController.ReleaseItem();
            }

            m_OnEffectLoaded?.Invoke(this, usedata);
        }
Пример #2
0
        /// <summary>
        /// 停止播放特效, 但是特效不会自动销毁, 在手动调用 RecycleFX 或者 StopAndRecycleFX 之前, 特效会一直存在, 只是不播放了
        /// 这个函数的调用者, 应该负责特效的回收(RecycleFX 或者 StopAndRecycleFX)
        /// </summary>
        /// <param name="immediately"></param>
        public void StopFX(bool immediately = false)
        {
            if (m_Status == EffectStatus.Playing || m_Status == EffectStatus.None)
            {
                m_AutoDestroyWhenNotExistLivingParticles = false;

                m_Status = EffectStatus.Stop;

                if (m_VFXController != null)
                {
                    m_VFXController.StopFX(immediately);
                }
            }
        }