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); }
/// <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); }
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); }
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); } } }