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<GameObject>("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<Canvas>();
|
|
if (null == canvas)
|
{
|
Debug.LogError("can not find canvas for UIEffect " + effectId);
|
return;
|
}
|
|
// 添加特效穿透阻挡器
|
EffectPenetrationBlocker blocker = effectTarget.AddComponent<EffectPenetrationBlocker>();
|
blocker.parentCanvas = canvas;
|
|
// 延迟一帧才生效
|
this.DelayFrame(blocker.UpdateSortingOrder);
|
|
// blocker.UpdateSortingOrder();
|
|
// 自动销毁
|
if (autoDestroy)
|
{
|
Destroy(effectTarget, destroyDelay);
|
}
|
}
|
|
}
|