void LoadEffectAssetFinish(string path, Object obj, object param1 = null, object param2 = null, object param3 = null) { uint tempCrc = CRC32.GetCRC32(path); AudioObj tempObj = AudioObjClassPool.Spawn(true); tempObj.m_AudioClip = obj as AudioClip; tempObj.m_ClearScene = (bool)param1; AudioAssetDic.Add(tempCrc, tempObj); EffectAudioPrefab tempEff = param3 as EffectAudioPrefab; tempEff.m_AudioSou.clip = tempObj.m_AudioClip; tempEff.m_AudioSou.volume = EffectAudioVolume; tempEff.m_AudioSou.loop = (bool)param2; if (EffectAudioVolume > 0f) { tempEff.m_AudioSou.Play(); } else { tempEff.m_AudioSou.Stop(); } tempEff.m_UsingBoo = true; EffectAudioDic.Add(tempEff.m_guid, tempEff); CoroutineMgr.Instance.StartCoroutine(tempEff.m_guid, EffectAudioTimerCor(tempEff.m_guid)); }
/// <summary> /// 播放效果音 /// </summary> public void PlayEffectAudioPrefab(EffectAudioPrefab canEffectAudioPrefab, string musicName, bool isLoopBoo = false, bool clearScene = false) { string tempPath = MUSIC_PATH + musicName; uint tempCrc = CRC32.GetCRC32(tempPath); AudioObj tempAudioObj; if (AudioAssetDic.TryGetValue(tempCrc, out tempAudioObj) && tempAudioObj != null) { canEffectAudioPrefab.m_AudioSou.clip = tempAudioObj.m_AudioClip; canEffectAudioPrefab.m_AudioSou.volume = EffectAudioVolume; canEffectAudioPrefab.m_AudioSou.loop = isLoopBoo; if (EffectAudioVolume > 0f) { canEffectAudioPrefab.m_AudioSou.Play(); } else { canEffectAudioPrefab.m_AudioSou.Stop(); } canEffectAudioPrefab.m_UsingBoo = true; } else { ResourcesMgr.Instance.AsyncLoadResource(tempPath, OnLoadEffectAssetFinish, LoadResPriority.RES_HIGHT, false, clearScene, isLoopBoo, canEffectAudioPrefab); } }
/// <summary> /// 加载单个assetbundle根据名字 /// </summary> /// <param name="name"></param> /// <returns></returns> private AssetBundle LoadAssetBundle(string name) { AssetBundleItem item = null; uint crc = CRC32.GetCRC32(name); if (!m_AssetBundleItemDic.TryGetValue(crc, out item)) { AssetBundle assetBundle = null; string fullPath = ABLoadPath + name; assetBundle = AssetBundle.LoadFromFile(fullPath); if (assetBundle == null) { ZLogger.Error(" load assetbundle Error : {0}", fullPath); } item = m_AssetBundleItemPool.Spawn(true); item.assetBundle = assetBundle; item.RefCount++; m_AssetBundleItemDic.Add(crc, item); } else { item.RefCount++; } return(item.assetBundle); }
/// <summary> /// 同步资源加载,针对给SceneMgr使用 /// </summary> public void LoadResourceScene(string path) { if (string.IsNullOrEmpty(path)) { return; } uint crc = CRC32.GetCRC32(path); ResourceItem item = GetCacheResourceItemScene(crc); if (item != null) { return; } #if UNITY_EDITOR if (AppConst.DebugMode) { item = AssetBundleMgr.Instance.FindResourceItem(crc); if (item == null) { item = new ResourceItem(); item.m_Crc = crc; } } #endif if (item == null) { item = AssetBundleMgr.Instance.LoadResourceAssetBundle(crc); } CacheResourceScene(path, ref item, crc); }
public void PlayUiAudio(string musicName, bool isLoopBoo = false, bool clearScene = false) { string tempPath = MUSIC_PATH + musicName; uint tempCrc = CRC32.GetCRC32(tempPath); AudioObj tempAudioObj; if (AudioAssetDic.TryGetValue(tempCrc, out tempAudioObj) && tempAudioObj != null) { uiAudio.clip = tempAudioObj.m_AudioClip; uiAudio.volume = EffectAudioVolume; uiAudio.loop = isLoopBoo; if (EffectAudioVolume > 0f) { bgAudio.Play(); } else { bgAudio.Stop(); } } else { ResourcesMgr.Instance.AsyncLoadResource(tempPath, LoadUiAssetFinish, LoadResPriority.RES_MIDDLE, false, clearScene, isLoopBoo); } }
/// <summary> /// 同步加载 /// </summary> /// <param name="path"></param> /// <param name="clearScene"></param> /// <returns></returns> public GameObject InstantiateObject(string path, bool setSceneObj = false, bool clearScene = true) { uint crc = CRC32.GetCRC32(path); ResourceObj resourceObj = GetObjectFromPool(crc); if (resourceObj == null) { resourceObj = m_ResourceObjClassPool.Spawn(true); resourceObj.m_Crc = crc; resourceObj.m_ClearScene = clearScene; //ResourceMgr提供加载方法 resourceObj = ResourcesMgr.Instance.LoadResource(path, resourceObj); if (resourceObj.m_ResItem.m_Obj != null) { resourceObj.m_CloneObj = GameObject.Instantiate(resourceObj.m_ResItem.m_Obj) as GameObject; } } if (setSceneObj) { resourceObj.m_CloneObj.transform.SetParent(SceneTrs, false); } int tempGuid = resourceObj.m_CloneObj.GetInstanceID(); if (!m_ResourceObjDic.ContainsKey(tempGuid)) { m_ResourceObjDic.Add(tempGuid, resourceObj); } return(resourceObj.m_CloneObj); }
/// <summary> /// 同步加载资源,针对给ObjectPoolMgr接口 /// </summary> public ResourceObj LoadResource(string path, ResourceObj resObj) { if (resObj == null) { return(null); } uint crc = resObj.m_Crc == 0 ? CRC32.GetCRC32(path) : resObj.m_Crc; ResourceItem item = GetCacheResourceItem(crc); if (item != null) { resObj.m_ResItem = item; return(resObj); } Object obj = null; #if UNITY_EDITOR if (AppConst.DebugMode) { item = AssetBundleMgr.Instance.FindResourceItem(crc); if (item != null && item.m_Obj != null) { obj = item.m_Obj as Object; } else { if (item == null) { item = new ResourceItem(); item.m_Crc = crc; } obj = LoadAssetByEditor <Object>(path); } } #endif if (obj == null) { item = AssetBundleMgr.Instance.LoadResourceAssetBundle(crc); if (item != null && item.m_AssetBundel != null) { if (item.m_Obj != null) { obj = item.m_Obj as Object; } else { obj = item.m_AssetBundel.LoadAsset <Object>(item.m_AssetName); } } } CacheResource(path, ref item, crc, obj); resObj.m_ResItem = item; item.m_ClearScene = resObj.m_ClearScene; return(resObj); }
void PreLoadFinish(string path, Object obj, object param1 = null, object param2 = null, object param3 = null) { uint tempCrc = CRC32.GetCRC32(path); AudioObj tempObj = AudioObjClassPool.Spawn(true); tempObj.m_AudioClip = obj as AudioClip; tempObj.m_ClearScene = (bool)param1; AudioAssetDic.Add(tempCrc, tempObj); }
/// <summary> /// 预加载资源 /// </summary> public void PreLoadRes(string path) { if (string.IsNullOrEmpty(path)) { return; } uint crc = CRC32.GetCRC32(path); ResourceItem item = GetCacheResourceItem(crc, 0); if (item != null) { return; } Object obj = null; #if UNITY_EDITOR if (AppConst.DebugMode) { item = AssetBundleMgr.Instance.FindResourceItem(crc); if (item != null && item.m_Obj != null) { obj = item.m_Obj as Object; } else { if (item == null) { item = new ResourceItem(); item.m_Crc = crc; } obj = LoadAssetByEditor <Object>(path); } } #endif if (obj == null) { item = AssetBundleMgr.Instance.LoadResourceAssetBundle(crc); if (item != null && item.m_AssetBundel != null) { if (item.m_Obj != null) { obj = item.m_Obj; } else { obj = item.m_AssetBundel.LoadAsset <Object>(item.m_AssetName); } } } CacheResource(path, ref item, crc, obj); //跳场景不清空缓存 item.m_ClearScene = false; ReleaseResource(obj, false); }
/// <summary> /// 同步资源加载,外部直接调用,仅加载不需要实例化的资源,例如textur,音频等等 /// </summary> public T LoadResource <T>(string path) where T : UnityEngine.Object { if (string.IsNullOrEmpty(path)) { return(null); } uint crc = CRC32.GetCRC32(path); ResourceItem item = GetCacheResourceItem(crc); if (item != null) { return(item.m_Obj as T); } T obj = null; #if UNITY_EDITOR if (AppConst.DebugMode) { item = AssetBundleMgr.Instance.FindResourceItem(crc); if (item != null && item.m_Obj != null) { obj = item.m_Obj as T; } else { if (item == null) { item = new ResourceItem(); item.m_Crc = crc; } obj = LoadAssetByEditor <T>(path); } } #endif if (obj == null) { item = AssetBundleMgr.Instance.LoadResourceAssetBundle(crc); if (item != null && item.m_AssetBundel != null) { if (item.m_Obj != null) { obj = item.m_Obj as T; } else { obj = item.m_AssetBundel.LoadAsset <T>(item.m_AssetName); } } } CacheResource(path, ref item, crc, obj); return(obj); }
public void PreLoadAudio(string musicName, bool clearScene = false) { string tempPath = MUSIC_PATH + musicName; uint tempCrc = CRC32.GetCRC32(tempPath); AudioObj tempAudioObj; if (AudioAssetDic.TryGetValue(tempCrc, out tempAudioObj) && tempAudioObj != null) { return; } else { ResourcesMgr.Instance.AsyncLoadResource(tempPath, PreLoadFinish, LoadResPriority.RES_SLOW, false, clearScene); } }
/// <summary> /// 释放AB包 /// </summary> /// <param name="name"></param> private void UnLoadAssetBundle(string name) { AssetBundleItem item = null; uint crc = CRC32.GetCRC32(name); if (m_AssetBundleItemDic.TryGetValue(crc, out item) && item != null) { item.RefCount--; if (item.RefCount <= 0) { item.assetBundle.Unload(true); item.Reset(); m_AssetBundleItemPool.Recycle(item); m_AssetBundleItemDic.Remove(crc); } } }
/// <summary> /// 不需要实例化的资源的卸载,根据路径 /// </summary> public bool ReleaseResource(string path, bool destoryObj = false) { if (string.IsNullOrEmpty(path)) { return(false); } uint crc = CRC32.GetCRC32(path); ResourceItem item = null; if (!AssetDic.TryGetValue(crc, out item) || item == null) { ZLogger.Error("AssetDic里不存在该资源:{0} ,可能释放了多次", path); } item.RefCount--; DestoryResourceItem(item, destoryObj); return(true); }
/// <summary> /// 异步加载资源(仅仅是不需要实例化的资源,例如texture,音频等等) /// </summary> public void AsyncLoadResource(string path, OnAsyncObjFinish dealFinish, LoadResPriority priority, bool isSprite = false, object param1 = null, object param2 = null, object param3 = null, uint crc = 0) { if (crc == 0) { crc = CRC32.GetCRC32(path); } ResourceItem item = GetCacheResourceItem(crc); if (item != null) { if (dealFinish != null) { dealFinish(path, item.m_Obj, param1, param2, param3); } return; } //判断是否在加载中 AsynvLoadResParam para = null; if (!m_LodingAssetDic.TryGetValue(crc, out para) || para == null) { para = m_AsyncLoadResParamPool.Spawn(true); para.m_Crc = crc; para.m_Path = path; para.m_SpriteBoo = isSprite; para.m_Priority = priority; m_LodingAssetDic.Add(crc, para); m_LoadingAssetList[(int)priority].Add(para); } //往回调列表里加回调 //这里加的是不针对的回调 ResMgrAsyncCallBack callBack = m_AsyncCallBackPool.Spawn(true); callBack.m_ResDealFinish = dealFinish; callBack.m_Param1 = param1; callBack.m_Param2 = param2; callBack.m_Param3 = param3; para.m_CallBackList.Add(callBack); }
void LoadUiAssetFinish(string path, Object obj, object param1 = null, object param2 = null, object param3 = null) { uint tempCrc = CRC32.GetCRC32(path); AudioObj tempObj = AudioObjClassPool.Spawn(true); tempObj.m_AudioClip = obj as AudioClip; tempObj.m_ClearScene = (bool)param1; AudioAssetDic.Add(tempCrc, tempObj); uiAudio.clip = tempObj.m_AudioClip; uiAudio.volume = EffectAudioVolume; uiAudio.loop = (bool)param2; if (EffectAudioVolume > 0f) { bgAudio.Play(); } else { bgAudio.Stop(); } }
/// <summary> /// 异步对象加载 /// </summary> /// <param name="path"></param> /// <param name="dealFinish"></param> /// <param name="priority"></param> /// <param name="setSceneObject"></param> /// <param name="param1"></param> /// <param name="param2"></param> /// <param name="param3"></param> /// <param name="bClear"></param> public long InstantiateObjectAsync(string path, OnAsyncObjFinish dealFinish, LoadResPriority priority, bool setSceneObject = false, object param1 = null, object param2 = null, object param3 = null, bool clearScene = true) { if (string.IsNullOrEmpty(path)) { return(0); } uint crc = CRC32.GetCRC32(path); ResourceObj resObj = GetObjectFromPool(crc); if (resObj != null) { if (setSceneObject) { resObj.m_CloneObj.transform.SetParent(SceneTrs, false); } if (dealFinish != null) { dealFinish(path, resObj.m_CloneObj, param1, param2, param3); } return(resObj.m_Guid); } long guid = ResourcesMgr.Instance.CreatGuid(); resObj = m_ResourceObjClassPool.Spawn(true); resObj.m_Crc = crc; resObj.m_SetSceneParent = setSceneObject; resObj.m_ClearScene = clearScene; resObj.m_DealFinish = dealFinish; resObj.m_Param1 = param1; resObj.m_Param2 = param2; resObj.m_Param3 = param3; //调用ResourcesMgr的异步加载接口 ResourcesMgr.Instance.AsyncLoadResource(path, resObj, OnLoadResourceObjFinish, priority); return(guid); }
void OnLoadEffectAssetFinish(string path, Object obj, object param1 = null, object param2 = null, object param3 = null) { uint tempCrc = CRC32.GetCRC32(path); AudioObj tempObj = AudioObjClassPool.Spawn(true); tempObj.m_AudioClip = obj as AudioClip; tempObj.m_ClearScene = (bool)param1; AudioAssetDic.Add(tempCrc, tempObj); EffectAudioPrefab tempEff = param3 as EffectAudioPrefab; tempEff.m_AudioSou.clip = tempObj.m_AudioClip; tempEff.m_AudioSou.volume = EffectAudioVolume; if (EffectAudioVolume > 0f) { tempEff.m_AudioSou.Play(); } else { tempEff.m_AudioSou.Stop(); } tempEff.m_UsingBoo = true; }
public void PlayEffectAudio(string musicName, bool is3DBoo, Vector3 canVector3, Transform canTrs = null, bool isLoopBoo = false, bool clearScene = false) { string tempPath = MUSIC_PATH + musicName; uint tempCrc = CRC32.GetCRC32(tempPath); AudioObj tempAudioObj; if (AudioAssetDic.TryGetValue(tempCrc, out tempAudioObj) && tempAudioObj != null) { EffectAudioPrefab tempEffectPrefabObj; if (EffectAudioRecyclePool.Count > 0) { tempEffectPrefabObj = EffectAudioRecyclePool.Dequeue(); if (canTrs) { tempEffectPrefabObj.m_AudioTrs.SetParent(canTrs, false); tempEffectPrefabObj.m_ResetParentBoo = true; } tempEffectPrefabObj.m_AudioTrs.transform.localPosition = canVector3; tempEffectPrefabObj.m_AudioSou.spatialBlend = is3DBoo ? 1 : 0; tempEffectPrefabObj.m_AudioSou.clip = tempAudioObj.m_AudioClip; tempEffectPrefabObj.m_AudioSou.volume = EffectAudioVolume; tempEffectPrefabObj.m_AudioSou.loop = isLoopBoo; if (EffectAudioVolume > 0f) { tempEffectPrefabObj.m_AudioSou.Play(); } else { tempEffectPrefabObj.m_AudioSou.Stop(); } tempEffectPrefabObj.m_UsingBoo = true; EffectAudioDic.Add(tempEffectPrefabObj.m_guid, tempEffectPrefabObj); } else { tempEffectPrefabObj = EffectAudioClassPool.Spawn(true); tempEffectPrefabObj.m_guid = GetEffectAudioGuid(); GameObject tempObj = new GameObject(tempEffectPrefabObj.m_guid + "_Stage"); tempEffectPrefabObj.m_AudioTrs = tempObj.transform; if (canTrs) { tempEffectPrefabObj.m_AudioTrs.SetParent(canTrs, false); tempEffectPrefabObj.m_ResetParentBoo = true; } else { tempEffectPrefabObj.m_AudioTrs.SetParent(SoundStageTrs, false); } tempEffectPrefabObj.m_AudioTrs.localPosition = canVector3; tempEffectPrefabObj.m_AudioSou = tempObj.AddComponent <AudioSource>(); tempEffectPrefabObj.m_AudioSou.spatialBlend = is3DBoo ? 1 : 0; tempEffectPrefabObj.m_AudioSou.volume = EffectAudioVolume; tempEffectPrefabObj.m_AudioSou.clip = tempAudioObj.m_AudioClip; tempEffectPrefabObj.m_AudioSou.loop = isLoopBoo; if (EffectAudioVolume > 0f) { tempEffectPrefabObj.m_AudioSou.Play(); } else { tempEffectPrefabObj.m_AudioSou.Stop(); } tempEffectPrefabObj.m_UsingBoo = true; EffectAudioDic.Add(tempEffectPrefabObj.m_guid, tempEffectPrefabObj); CoroutineMgr.Instance.StartCoroutine(tempEffectPrefabObj.m_guid, EffectAudioTimerCor(tempEffectPrefabObj.m_guid)); } } else { EffectAudioPrefab tempEffectPrefabObj; if (EffectAudioRecyclePool.Count > 0) { tempEffectPrefabObj = EffectAudioRecyclePool.Dequeue(); if (canTrs) { tempEffectPrefabObj.m_AudioTrs.SetParent(canTrs, false); tempEffectPrefabObj.m_ResetParentBoo = true; } tempEffectPrefabObj.m_AudioTrs.transform.localPosition = canVector3; tempEffectPrefabObj.m_AudioSou.spatialBlend = is3DBoo ? 1 : 0; } else { tempEffectPrefabObj = EffectAudioClassPool.Spawn(true); tempEffectPrefabObj.m_guid = GetEffectAudioGuid(); GameObject tempObj = new GameObject(tempEffectPrefabObj.m_guid + "_Stage"); tempEffectPrefabObj.m_AudioTrs = tempObj.transform; if (canTrs) { tempEffectPrefabObj.m_AudioTrs.SetParent(canTrs, false); tempEffectPrefabObj.m_ResetParentBoo = true; } else { tempEffectPrefabObj.m_AudioTrs.SetParent(SoundStageTrs, false); } tempEffectPrefabObj.m_AudioTrs.localPosition = canVector3; tempEffectPrefabObj.m_AudioSou = tempObj.AddComponent <AudioSource>(); tempEffectPrefabObj.m_AudioSou.spatialBlend = is3DBoo ? 1 : 0; } ResourcesMgr.Instance.AsyncLoadResource(tempPath, LoadEffectAssetFinish, LoadResPriority.RES_HIGHT, false, clearScene, isLoopBoo, tempEffectPrefabObj); } }