| | |
| | | using UnityEngine; |
| | | |
| | | public class EffectMgr : SingletonMonobehaviour<EffectMgr> |
| | | |
| | | { |
| | | public UIEffectBehaviour GetUIEffect(int id, bool _destroy = false) |
| | | { |
| | | EffectConfig effectCfg = EffectConfig.Get(id); |
| | | |
| | | if (null == effectCfg) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | var _prefab = ResManager.Instance.LoadAsset<GameObject>("UIEffect/" + effectCfg.packageName, effectCfg.fxName); |
| | | if (_prefab == null) |
| | | { |
| | | return null; |
| | | } |
| | | GameObjectPoolManager.GameObjectPool _pool = GameObjectPoolManager.Instance.RequestPool(_prefab); |
| | | _prefab = _pool.Request(); |
| | | var _effect = _prefab.GetComponent<UIEffect>(); |
| | | if (_effect != null && _destroy) |
| | | { |
| | | Destroy(_effect); |
| | | } |
| | | var _behaviour = _prefab.AddMissingComponent<UIEffectBehaviour>(); |
| | | return _behaviour; |
| | | } |
| | | |
| | | //玩家是否主动屏蔽了特效 |
| | | public bool IsNotShowBySetting(int id) |
| | |
| | | if (config == null) |
| | | { |
| | | #if UNITY_EDITOR |
| | | Debug.LogError("特效配置表中没有找到id为" + id + "的特效"); |
| | | if (id != 0) |
| | | Debug.LogError("特效配置表中没有找到id为" + id + "的特效"); |
| | | #endif |
| | | return true; |
| | | } |
| | |
| | | return false; |
| | | } |
| | | |
| | | public UIEffect PlayUIEffect(int id, int renderQueue, Transform parent, bool loop) |
| | | { |
| | | if (IsNotShowBySetting(id)) |
| | | return null; |
| | | UIEffectBehaviour _behaviour = GetUIEffect(id); |
| | | UIEffect uieffect = null; |
| | | if (_behaviour != null) |
| | | { |
| | | _behaviour.SetActive(false); |
| | | _behaviour.transform.SetParent(parent); |
| | | uieffect = _behaviour.AddMissingComponent<UIEffect>(); |
| | | uieffect.target = _behaviour; |
| | | SetUIEffect(uieffect, id, renderQueue, loop, Vector3.zero, Vector3.zero); |
| | | uieffect.Active(); |
| | | } |
| | | return uieffect; |
| | | } |
| | | |
| | | public UIEffect PlayUIEffect(int id, int renderQueue, Transform parent, Vector3 _localPos, Vector3 _localRot, bool loop) |
| | | { |
| | | if (IsNotShowBySetting(id)) |
| | | return null; |
| | | UIEffectBehaviour _behaviour = GetUIEffect(id); |
| | | UIEffect uieffect = null; |
| | | if (_behaviour != null) |
| | | { |
| | | _behaviour.SetActive(false); |
| | | _behaviour.transform.SetParent(parent); |
| | | uieffect = _behaviour.AddMissingComponent<UIEffect>(); |
| | | uieffect.target = _behaviour; |
| | | SetUIEffect(uieffect, id, renderQueue, loop, _localPos, _localRot); |
| | | uieffect.Active(); |
| | | } |
| | | return uieffect; |
| | | } |
| | | |
| | | public UIEffect PlayUIEffect(int id, int renderQueue, Vector3 _localPos, bool loop = false) |
| | | { |
| | | if (IsNotShowBySetting(id)) |
| | | return null; |
| | | UIEffectBehaviour _behaviour = GetUIEffect(id); |
| | | UIEffect uieffect = null; |
| | | if (_behaviour != null) |
| | | { |
| | | _behaviour.SetActive(false); |
| | | // TODO YYL |
| | | // _behaviour.transform.SetParent(WindowCenter.Instance.uiRoot.baseCanvas); |
| | | uieffect = _behaviour.AddMissingComponent<UIEffect>(); |
| | | uieffect.target = _behaviour; |
| | | SetUIEffect(uieffect, id, renderQueue, loop, _localPos, Vector3.zero); |
| | | uieffect.Active(); |
| | | } |
| | | return uieffect; |
| | | } |
| | | // public void RecyleUIEffect(int id, GameObject _effectObj) |
| | | // { |
| | | // EffectConfig effectCfg = EffectConfig.Get(id); |
| | | |
| | | private void SetUIEffect(UIEffect effect, int id, int renderQueue, bool loop, Vector3 _localPos, Vector3 _localRot) |
| | | { |
| | | effect.effect = id; |
| | | effect.renderQueue = renderQueue; |
| | | effect.loop = loop; |
| | | effect.effectPos = _localPos; |
| | | effect.effectRot = _localRot; |
| | | } |
| | | // if (null == effectCfg) |
| | | // { |
| | | // return; |
| | | // } |
| | | |
| | | public void RecyleUIEffect(int id, GameObject _effectObj) |
| | | { |
| | | EffectConfig effectCfg = EffectConfig.Get(id); |
| | | // var _prefab = ResManager.Instance.LoadAsset<GameObject>("UIEffect/" + effectCfg.packageName, effectCfg.fxName); |
| | | // if (_prefab == null) |
| | | // { |
| | | // return; |
| | | // } |
| | | |
| | | if (null == effectCfg) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | var _prefab = ResManager.Instance.LoadAsset<GameObject>("UIEffect/" + effectCfg.packageName, effectCfg.fxName); |
| | | if (_prefab == null) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | GameObjectPoolManager.GameObjectPool _pool = GameObjectPoolManager.Instance.RequestPool(_prefab); |
| | | if (_pool != null) |
| | | { |
| | | _pool.Release(_effectObj); |
| | | } |
| | | } |
| | | // GameObjectPoolManager.GameObjectPool _pool = GameObjectPoolManager.Instance.RequestPool(_prefab); |
| | | // if (_pool != null) |
| | | // { |
| | | // _pool.Release(_effectObj); |
| | | // } |
| | | // } |
| | | } |
| | | |