using Snxxz.UI; using UnityEngine; public class EffectMgr : SingletonMonobehaviour { public UIEffectBehaviour GetUIEffect(int id, bool _destroy = false) { var _prefab = InstanceResourcesLoader.LoadEffect(id); if (_prefab == null) { return null; } GameObjectPoolManager.GameObjectPool _pool = GameObjectPoolManager.Instance.RequestPool(_prefab); _prefab = _pool.Request(); var _effect = _prefab.GetComponent(); if (_effect != null && _destroy) { Destroy(_effect); } var _behaviour = _prefab.AddMissingComponent(); return _behaviour; } public UIEffect PlayUIEffect(int id, int renderQueue, Transform parent, bool loop) { UIEffectBehaviour _behaviour = GetUIEffect(id); UIEffect uieffect = null; if (_behaviour != null) { _behaviour.gameObject.SetActive(false); _behaviour.transform.SetParent(parent); uieffect = _behaviour.AddMissingComponent(); uieffect.target = _behaviour; SetUIEffect(uieffect, id, renderQueue, loop, Vector3.zero); uieffect.Active(); } return uieffect; } public UIEffect PlayUIEffect(int id, int renderQueue, Transform parent, Vector3 _localPos, bool loop) { UIEffectBehaviour _behaviour = GetUIEffect(id); UIEffect uieffect = null; if (_behaviour != null) { _behaviour.gameObject.SetActive(false); _behaviour.transform.SetParent(parent); uieffect = _behaviour.AddMissingComponent(); uieffect.target = _behaviour; SetUIEffect(uieffect, id, renderQueue, loop, _localPos); uieffect.Active(); } return uieffect; } public UIEffect PlayUIEffect(int id, int renderQueue, Vector3 _localPos, bool loop = false) { UIEffectBehaviour _behaviour = GetUIEffect(id); UIEffect uieffect = null; if (_behaviour != null) { _behaviour.gameObject.SetActive(false); _behaviour.transform.SetParent(WindowCenter.Instance.uiRoot.baseCanvas); uieffect = _behaviour.AddMissingComponent(); uieffect.target = _behaviour; SetUIEffect(uieffect, id, renderQueue, loop, _localPos); uieffect.Active(); } return uieffect; } private void SetUIEffect(UIEffect effect, int id, int renderQueue, bool loop, Vector3 _localPos) { effect.effect = id; effect.renderQueue = renderQueue; effect.loop = loop; effect.effectPos = _localPos; } public void RecyleUIEffect(int id, GameObject _effectObj) { var _prefab = InstanceResourcesLoader.LoadEffect(id); _effectObj.SetActive(false); if (_prefab == null) { return; } GameObjectPoolManager.GameObjectPool _pool = GameObjectPoolManager.Instance.RequestPool(_prefab); if (_pool != null) { _pool.Release(_effectObj); } } }