/// <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); }
/// <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); } } }