protected bool DestroyPrefabEffect(UEffectPrefabParam _effectParam) { //删实例 if (_effectParam.EffectGameObject != null) { UEffectNode tmpNode = _effectParam.EffectGameObject.GetComponent <UEffectNode>(); if (tmpNode != null) { tmpNode.To <UEffectNodeData_Prefab>().StopEffect(); UnRegisterEffectPrefabNode(tmpNode, _effectParam.AttachEffectType); } _effectParam.EffectRes.DestroyInstanceRes(ref _effectParam.EffectGameObject); } //删资源 UEffectDataLoadParam loadParam = null; if (m_dicEffectPrefabTypeUsed.TryGetValue(_effectParam.AttachEffectType, out loadParam) && _effectParam.IsDestroyRes) { if (_effectParam is UEffectPrefabAsyncParam) { AssetBundleManager.ReleaseResNodeAsync(this, loadParam.RefferencePrefabResNode, this, true); } else { AssetBundleManager.ReleaseResNode(this, loadParam.RefferencePrefabResNode, true); } m_dicEffectPrefabTypeUsed.Remove(_effectParam.AttachEffectType); } return(true); }
//同步加载 protected ResNode LoadEffectPrefab(UEffectPrefabParam _effectParam) { if (!m_dicEffectDataTable.ContainsKey(_effectParam.AttachEffectType)) { Trace.LogWarning("UI效果资源数据容器 没有类型:" + _effectParam.AttachEffectType + " 的数据"); return(null); } UEffectDataLoadParam data = null; { ResNodeHandleParamBase param = new ResNodeHandleParam_Path(AssetType.Asset_Prefab, UPath.UArtistEffectPath + m_dicEffectDataTable[_effectParam.AttachEffectType].EffectPath); var resNode = AssetBundleManager.GetResNode(this, param); if (resNode == null) { Trace.LogError("无法取资源:" + UPath.UArtistEffectPath + m_dicEffectDataTable[_effectParam.AttachEffectType].EffectPath); return(null); } //AssetBundleManager.SaveMemory(resNode); //当前使用的效果类型超出了限定值,先移除下无效的记录 if (m_dicEffectPrefabTypeUsed.Count >= MaxEffectPrefabTypeCount) { ClearUnusedEffectPrefabType(); } data = new UEffectDataLoadParam(resNode); m_dicEffectPrefabTypeUsed.Add(_effectParam.AttachEffectType, data); } _effectParam.EffectRes = data.RefferencePrefabResNode; return(data.RefferencePrefabResNode); }
protected bool CreatePrefabEffect(UEffectPrefabParam _effectParam) { UEffectDataLoadParam data = null; //已经加载过的直接实例化 if (m_dicEffectPrefabTypeUsed.TryGetValue(_effectParam.AttachEffectType, out data)) { _effectParam.EffectRes = data.RefferencePrefabResNode; } else { if (_effectParam is UEffectPrefabAsyncParam) { AsyncLoadEffectPrefab(_effectParam); return(true); } else { if (LoadEffectPrefab(_effectParam) == null) { return(false); } } } InstantiateEffectPrefab(_effectParam); InitEffectPrefabRefParam(_effectParam); return(true); }