using System.Collections; using System.Collections.Generic; using UnityEngine; public class EffectPlayer : MonoBehaviour { public int effectId; public bool autoDestroy = false; public float destroyDelay = 0f; public Canvas canvas = null; public GameObject effectTarget = null; protected void Start() { if (EffectMgr.Instance.IsNotShowBySetting(effectId)) { return; } if (null != effectTarget) { DestroyImmediate(effectTarget); effectTarget = null; } EffectConfig effectCfg = EffectConfig.Get(effectId); if (null == effectCfg) { return; } // YYL TODO // 在这里考虑用池的话可能走配置好一点 原本的是无论如何都走池 但是实际上有些特效并不需要 // 加载特效资源 var effectPrefab = ResManager.Instance.LoadAsset("UIEffect/" + effectCfg.packageName, effectCfg.fxName); if (effectPrefab == null) { Debug.LogError($"加载UI特效失败: {effectCfg.packageName}"); return; } // 实例化特效 effectTarget = Instantiate(effectPrefab, transform); effectTarget.name = $"Effect_{effectCfg.packageName}"; if (null == canvas) canvas = GetComponentInParent(); if (null == canvas) { Debug.LogError("can not find canvas for UIEffect " + effectId); return; } // 添加特效穿透阻挡器 EffectPenetrationBlocker blocker = effectTarget.AddComponent(); blocker.parentCanvas = canvas; // 延迟一帧才生效 this.DelayFrame(blocker.UpdateSortingOrder); // blocker.UpdateSortingOrder(); // 自动销毁 if (autoDestroy) { Destroy(effectTarget, destroyDelay); } } }