Esempio n. 1
0
        public void AddAsset(string name, BundleCacheType cacheType, float cacheTimeout = 5)
        {
            var loader = new Loader()
            {
                name         = name,
                loaderType   = Loader.LoaderType.Asset,
                cacheType    = cacheType,
                cacheTimeout = cacheTimeout
            };

            m_loaderQueue.Enqueue(loader);
        }
Esempio n. 2
0
        public void AddScene(string name, LoadSceneMode loadMode, BundleCacheType cacheType, float cacheTimeout = 5)
        {
            var loader = new Loader()
            {
                name         = name,
                loaderType   = Loader.LoaderType.Scene,
                loadMode     = loadMode,
                cacheType    = cacheType,
                cacheTimeout = cacheTimeout
            };

            m_loaderQueue.Enqueue(loader);
        }
Esempio n. 3
0
        /// <summary>
        /// 加载资源
        /// </summary>
        /// <param name="assetName"></param>
        /// <param name="completeCallback"></param>
        /// <param name="cacheType"></param>
        /// <param name="cacheTimeout"></param>
        public void LoadAsset(string assetName, Action <string, UnityEngine.Object> completeCallback = null, BundleCacheType cacheType = BundleCacheType.TimeoutCache, float cacheTimeout = 5)
        {
            if (!CheckInited())
            {
                completeCallback?.Invoke("", null);
                return;
            }

            var requestBundleName = m_assetNameToBundleNameMap[assetName];

            if (string.IsNullOrEmpty(requestBundleName))
            {
                completeCallback?.Invoke("", null);
                Debug.LogErrorFormat("Asset Info {0} Not Found", assetName);
                return;
            }

            IncreaseRef(requestBundleName);
            if (m_assetLoading.ContainsKey(assetName))            //说明之前有同一个资源的请求
            {
                m_assetLoading[assetName].assetCompleteCallbackList.Add(completeCallback);
                return;
            }

            WeakReference weakPtr = null;

            if (m_assetNameToWeakPtr.TryGetValue(assetName, out weakPtr) && weakPtr.IsAlive)
            {
                completeCallback?.Invoke(assetName, (UnityEngine.Object)weakPtr.Target);
                return;
            }

            var assetLoader = new KTAssetLoader()
            {
                loaderType                = KTAssetLoader.LoaderType.Asset,
                requestAssetName          = assetName,
                requestBundleName         = requestBundleName,
                cacheType                 = cacheType,
                cacheTimeout              = cacheTimeout,
                dependentBundleNames      = m_manifest.GetAllDependencies(requestBundleName).ToList(),
                assetRequest              = null,
                assetCompleteCallbackList = new List <Action <string, UnityEngine.Object> >()
                {
                    completeCallback
                },
                assetCallbackForManager = AssetCompleteCallback
            };

            m_assetLoading.Add(assetName, assetLoader);

            for (int i = 0, j = assetLoader.dependentBundleNames.Count; i < j; ++i)
            {
                var bundleName = assetLoader.dependentBundleNames[i];
                if (m_bundleLoaded.ContainsKey(bundleName))
                {
                    continue;
                }

                if (m_bundleLoading.ContainsKey(bundleName))
                {
                    m_bundleLoading[bundleName].Subscribe(assetLoader);
                }
                else
                {
                    var bundleLoader = assetLoader.CreateBundleLoader(bundleName, BundleCompleteCallback);
                    m_bundleLoading.Add(bundleName, bundleLoader);
                    bundleLoader.BeginLoad();
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 加载场景
        /// </summary>
        /// <param name="assetName"></param>
        /// <param name="completeCallback"></param>
        /// <param name="loadMode"></param>
        /// <param name="cacheType">可以选三种模式</param>
        /// <param name="cacheTimeout"></param>
        public void LoadScene(string assetName, Action <string> completeCallback = null, LoadSceneMode loadMode = LoadSceneMode.Additive, BundleCacheType cacheType = BundleCacheType.None, float cacheTimeout = 5)
        {
            if (!CheckInited())
            {
                completeCallback?.Invoke("");
                return;
            }

            var requestBundleName = m_assetNameToBundleNameMap[assetName];

            if (string.IsNullOrEmpty(requestBundleName))
            {
                completeCallback?.Invoke("");
                Debug.LogErrorFormat("Asset Info {0} Not Found", assetName);
                return;
            }

            if (m_assetLoading.ContainsKey(assetName))            //场景不允许请求重复
            {
                completeCallback?.Invoke("");
                Debug.LogErrorFormat("Request Scene {0} Repeated", assetName);
                return;
            }

            IncreaseRef(requestBundleName);

            var assetLoader = new KTAssetLoader()
            {
                loaderType              = KTAssetLoader.LoaderType.Scene,
                requestAssetName        = assetName,
                requestBundleName       = requestBundleName,
                cacheType               = cacheType,
                cacheTimeout            = cacheTimeout,
                dependentBundleNames    = m_manifest.GetAllDependencies(requestBundleName).ToList(),
                sceneRequest            = null,
                loadMode                = loadMode,
                sceneCompleteCallback   = completeCallback,
                assetCallbackForManager = AssetCompleteCallback
            };

            m_assetLoading.Add(assetName, assetLoader);

            for (int i = 0, j = assetLoader.dependentBundleNames.Count; i < j; ++i)
            {
                var bundleName = assetLoader.dependentBundleNames[i];
                if (m_bundleLoaded.ContainsKey(bundleName))
                {
                    continue;
                }

                if (m_bundleLoading.ContainsKey(bundleName))
                {
                    m_bundleLoading[bundleName].Subscribe(assetLoader);
                }
                else
                {
                    var bundleLoader = assetLoader.CreateBundleLoader(bundleName, BundleCompleteCallback);
                    m_bundleLoading.Add(bundleName, bundleLoader);
                    bundleLoader.BeginLoad();
                }
            }
        }
Esempio n. 5
0
 public void LoadAsset(string assetName, Action <string, UnityEngine.Object> completeCallback = null, BundleCacheType cacheType = BundleCacheType.None, float cacheTimeout = 5)
 {
     m_manager.LoadAsset(assetName, completeCallback, cacheType, cacheTimeout);
 }
Esempio n. 6
0
 public void LoadScene(string assetName, Action <string> completeCallback = null, LoadSceneMode loadMode = LoadSceneMode.Additive, BundleCacheType cacheType = BundleCacheType.None, float cacheTimeout = 5)
 {
     m_manager.LoadScene(assetName, completeCallback, loadMode, cacheType, cacheTimeout);
 }
Esempio n. 7
0
        /// <summary>
        /// 加载资源
        /// </summary>
        /// <param name="assetName"></param>
        /// <param name="completeCallback"></param>
        /// <param name="cacheType"></param>
        /// <param name="cacheTimeout"></param>
        public void LoadAsset(string assetName, Action <string, UnityEngine.Object> completeCallback = null, BundleCacheType cacheType = BundleCacheType.None, float cacheTimeout = 5)
        {
            if (!CheckInited())
            {
                if (completeCallback != null)
                {
                    completeCallback("", null);
                }

                return;
            }

            var requestBundleName = m_assetNameToBundleNameMap[assetName];

            IncreaseRef(requestBundleName);

            if (string.IsNullOrEmpty(requestBundleName))
            {
                if (completeCallback != null)
                {
                    completeCallback("", null);
                }

                Debug.LogError("Asset Info " + assetName + " Not Found");
                return;
            }

            if (m_assetLoading.ContainsKey(assetName))//说明之前有同一个资源的请求
            {
                m_assetLoading[assetName].completeCallbackList.Add(completeCallback);
                return;
            }

            WeakReference weakPtr = null;

            if (m_assetNameToWeakPtr.TryGetValue(assetName, out weakPtr) && weakPtr.IsAlive)
            {
                if (completeCallback != null)
                {
                    completeCallback(assetName, (UnityEngine.Object)weakPtr.Target);
                }

                return;
            }

            //由update决定下一帧是读取bundle还是读取asset
            var assetLoader = new KTAssetLoader()
            {
                loaderType           = KTAssetLoader.LoaderType.Asset,
                requestAssetName     = assetName,
                requestBundleName    = requestBundleName,
                cacheType            = cacheType,
                cacheTimeout         = cacheTimeout,
                dependentBundleNames = m_manifest.GetAllDependencies(requestBundleName).ToList(),
                request = null,
                completeCallbackList = new List <Action <string, UnityEngine.Object> >()
                {
                    completeCallback
                }
            };

            m_assetLoading.Add(assetName, assetLoader);
        }
Esempio n. 8
0
        /// <summary>
        /// 加载场景
        /// </summary>
        /// <param name="assetName"></param>
        /// <param name="completeCallback"></param>
        /// <param name="loadMode"></param>
        /// <param name="cacheType">可以选三种模式</param>
        /// <param name="cacheTimeout"></param>
        public void LoadScene(string assetName, Action <string> completeCallback = null, LoadSceneMode loadMode = LoadSceneMode.Additive, BundleCacheType cacheType = BundleCacheType.None, float cacheTimeout = 5)
        {
            if (!CheckInited())
            {
                if (completeCallback != null)
                {
                    completeCallback("");
                }

                return;
            }

            var requestBundleName = m_assetNameToBundleNameMap[assetName];

            IncreaseRef(requestBundleName);

            if (string.IsNullOrEmpty(requestBundleName))
            {
                if (completeCallback != null)
                {
                    completeCallback("");
                }

                Debug.LogError("Asset Info " + assetName + " Not Found");
                return;
            }

            if (m_assetLoading.ContainsKey(assetName))//场景不允许请求重复
            {
                if (completeCallback != null)
                {
                    completeCallback("");
                }

                Debug.LogError("Request Scene " + assetName + " Repeated");
                return;
            }

            WeakReference weakPtr = null;

            if (m_assetNameToWeakPtr.TryGetValue(assetName, out weakPtr) && weakPtr.IsAlive)
            {
                if (completeCallback != null)
                {
                    completeCallback(assetName);
                }

                return;
            }

            //由update决定下一帧是读取bundle还是读取asset
            var assetLoader = new KTAssetLoader()
            {
                loaderType            = KTAssetLoader.LoaderType.Scene,
                requestAssetName      = assetName,
                requestBundleName     = requestBundleName,
                cacheType             = cacheType,
                cacheTimeout          = cacheTimeout,
                dependentBundleNames  = m_manifest.GetAllDependencies(requestBundleName).ToList(),
                sceneRequest          = null,
                sceneCompleteCallback = completeCallback
            };

            m_assetLoading.Add(assetName, assetLoader);
        }