Ejemplo n.º 1
0
    public static bool SetChangeHeroSkinEffect(int nSkinId, ref SceneEffectParamBase lastSkinEffectParam, ref int nLastSkinId, Transform parentTrans, PERSONMODELVIEWID viewType = PERSONMODELVIEWID.PERSONMODELVIEWID_GAMEWAITINGROOM, Action <object> resLoadFinished = null, object userObj = null)
    {
        if (lastSkinEffectParam != null)
        {
            SceneEffectManager.Instance.DestroySceneEffect(ref lastSkinEffectParam);
            lastSkinEffectParam = null;
            nLastSkinId         = 0;
        }

        if (nSkinId < 0)
        {
            return(false);
        }

        int nSelectEffectID = GameLogicAPI.getSelectEffectID(nSkinId);
        //SceneEffectParamBase effectParam = new SceneEffectParamAsync(nSelectEffectID, parentTrans, _onResLoadFinished: resLoadFinished, _resLoadUserObject: userObj);
        SceneEffectParamBase effectParam = new SceneEffectParamAsync(nSelectEffectID, parentTrans, AssetLoadPriority.Priority_Exclusive, _onResLoadFinished: resLoadFinished, _resLoadUserObject: userObj);

        SceneEffectManager.Instance.CreateSceneEffect(ref effectParam);

        lastSkinEffectParam = effectParam;
        nLastSkinId         = nSkinId;

        return(true);
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 删除场景光效
    /// </summary>
    /// <param name="_effectParam">场景光效参数</param>
    /// <param name="_bReleaseSource">是否释放光效资源</param>
    /// <returns></returns>
    public bool DestroySceneEffect(ref SceneEffectParamBase _effectParam, bool _bReleaseSource = true)
    {
        if (_effectParam == null)
        {
            return(false);
        }

        int nEffectID = _effectParam.AttachEffectID;

        //不在activelist里面意味着走了异步,资源没加载完
        if (!m_listActiveEffectParam.Contains(_effectParam))
        {
            //删除时异步加载未完成
            if (m_dicEffectIDResNodeUsed.ContainsKey(nEffectID) && !m_dicEffectIDResNodeUsed[nEffectID].IsValid())
            {
                SceneEffectParamAsync paramAsync = _effectParam as SceneEffectParamAsync;
                if (paramAsync != null)
                {
                    paramAsync.IsCanBeInstance = true;
                }
            }
        }
        else
        {
            if (_effectParam.ReturnComponent == null)
            {
                m_listActiveEffectParam.Remove(_effectParam);
            }
            else
            {
                if (m_dicEffectIDResNodeUsed.ContainsKey(nEffectID))
                {
                    _effectParam.ReturnComponent.StopEffect();
                    var temp = _effectParam.ReturnComponent.gameObject;
                    m_dicEffectIDResNodeUsed[nEffectID].DestroyInstanceRes(ref temp);
                }

                m_listActiveEffectParam.Remove(_effectParam);
            }
        }

        if (_effectParam is SceneEffectParamAsync)
        {
            ReleaseResNodeAsync(nEffectID);
        }
        else
        {
            if (_bReleaseSource)
            {
                ReleaseResNode(nEffectID);
            }
        }


        return(true);
    }
Ejemplo n.º 3
0
    private ResNode GetResNodeAsync(string _strPath, SceneEffectParamBase _param)
    {
        ResNodeHandleParamBase param       = new ResNodeHandleParam_Path(AssetType.Asset_Prefab, _strPath);
        SceneEffectParamAsync  _paramAsync = _param as SceneEffectParamAsync;
        ResNode resultResNode = AssetBundleManager.GetResNodeAsync(this, param, this, _param, _paramAsync == null ? 0 : _paramAsync.priority);//AssetBundleManager.GetResNode(this, param);

        if (resultResNode != null)
        {
            return(resultResNode);
        }
        return(null);
    }
Ejemplo n.º 4
0
    public void ResLoadCallBack(ResConfigData cof, ResNode res, object UserDataObj)
    {
        SceneEffectParamAsync param = UserDataObj as SceneEffectParamAsync;
        ResNode resNodeInfo         = null;

        if (param != null && m_dicEffectIDResNodeUsed.ContainsKey(param.AttachEffectID) && param.IsCanBeInstance)
        {
            resNodeInfo = m_dicEffectIDResNodeUsed[param.AttachEffectID];
            if (resNodeInfo != null)
            {
                InitEffectParam(resNodeInfo, param);
            }
        }
    }