yyl
2025-06-09 b9751b2f076ee050fe5b685e91ae4fc4469b1015
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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)
    {
        var config = EffectConfig.Get(id);
        if (config == null)
        {
#if UNITY_EDITOR
            Debug.LogError("特效配置表中没有找到id为" + id + "的特效");
#endif
            return true;
        }
        bool isNotShow = LocalSave.GetBool("IsNotShowBroadEffect", false);
        if (config.notShow == 1 && isNotShow)
            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;
    }
 
    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;
    }
 
    public void RecyleUIEffect(int id, GameObject _effectObj)
    {
        EffectConfig effectCfg = EffectConfig.Get(id);
 
        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);
        }
    }
}