Beispiel #1
0
    /// <summary>
    /// Shows the effect.
    /// </summary>
    /// <returns>The effect.</returns>
    /// <param name="efxName">Efx name.</param>
    /// <param name="parent">Parent. 如果为空则使用mEffectCfg的节点</param>
    /// <param name="aliveTime">Alive time. 如果为0,则一直显示直到StopEffect或者HideEffect. aliveTime大于0的特效无法通过stop或者hide关闭</param>
    /// <param name="initOrderDiff">首次显示时,相对父级canvas的sorting order差。如果预设中已经设置SyncRenderSortingOrderWithCanvas, 则该值无效。</param>
    public GameObject ShowEffect(string efxName, Transform parent = null, float aliveTime = 0, int initOrderDiff = 1)
    {
        if (mEffectCfg == null)
        {
            return(null);
        }

        if (mEffects.ContainsKey(efxName))
        {
            var go = mEffects [efxName];
            if (go != null)
            {
                if (aliveTime > 0)
                {
                    mEffects.Remove(efxName);
                    AutoHide autoHide = go.GetComponent <AutoHide> (true);
                    autoHide.playTime = aliveTime;
                }
                go.SetActive(false);
                go.SetActive(true);
                return(go);
            }
            else
            {
                mEffects.Remove(efxName);
            }
        }

        if (parent == null)
        {
            parent = mEffectCfg.transform;
        }

        GameObject efxGo = mEffectCfg.ShowEffect(efxName, parent);

        if (efxGo == null)
        {
            return(null);
        }

        InitEfxSortingOrderDiff(efxGo, initOrderDiff);

        if (aliveTime > 0)
        {
            AutoHide autoHide = efxGo.GetComponent <AutoHide> (true);
            autoHide.playTime = aliveTime;
        }
        else
        {
            mEffects.Add(efxName, efxGo);
        }

        return(efxGo);
    }