예제 #1
0
        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));
        }
예제 #2
0
        /// <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);
            }
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        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);
            }
        }
예제 #6
0
        /// <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);
        }
예제 #7
0
        /// <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);
        }
예제 #8
0
        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);
        }
예제 #9
0
        /// <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);
        }
예제 #10
0
        /// <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);
        }
예제 #11
0
        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);
            }
        }
예제 #12
0
        /// <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);
                }
            }
        }
예제 #13
0
        /// <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);
        }
예제 #14
0
        /// <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);
        }
예제 #15
0
        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();
            }
        }
예제 #16
0
        /// <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);
        }
예제 #17
0
        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;
        }
예제 #18
0
        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);
            }
        }