Exemplo n.º 1
0
        // 当资源文件加载完毕
        private void OnAssetFileLoad(AssetFileLoader loader)
        {
            // 注意 : 如果在加载过程中调用UnLoad,等资源文件加载完毕时不再执行后续准备工作。
            if (Result != EAssetResult.Loading)
            {
                return;
            }

            // Check error
            if (loader.LoadState != EAssetFileLoadState.LoadAssetFileOK)
            {
                Result = EAssetResult.Failed;
                _userCallback?.Invoke(this);
                return;
            }

            if (this is AssetScene || this is AssetPackage)
            {
                bool result = OnPrepare(null);
                Result = result ? EAssetResult.OK : EAssetResult.Failed;
                _userCallback?.Invoke(this);
            }
            else if (this is AssetObject)
            {
                loader.LoadMainAsset(null, OnMainAssetLoad);
            }
            else
            {
                throw new System.NotImplementedException($"Not support invalid asset class.");
            }
        }
Exemplo n.º 2
0
 public AssetProvider(AssetFileLoader owner, string assetName, System.Type assetType)
 {
     _owner    = owner;
     AssetName = assetName;
     AssetType = assetType;
     States    = EAssetProviderStates.None;
     Handle    = new AssetOperationHandle(this);
 }
Exemplo n.º 3
0
 /// <summary>
 /// 卸载
 /// </summary>
 public void UnLoad()
 {
     Result        = EAssetResult.None;
     _userCallback = null;
     if (_cacheLoader != null)
     {
         _cacheLoader.Release();
         _cacheLoader = null;
     }
 }
Exemplo n.º 4
0
        /// <summary>
        /// 卸载
        /// </summary>
        public virtual void UnLoad()
        {
            Result = EAssetResult.None;

            if (_cacheLoader != null)
            {
                _cacheLoader.Release();
                _cacheLoader = null;
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// 异步加载
        /// </summary>
        public void Load(string resName, System.Action <Asset, EAssetResult> prepareCallbcak)
        {
            // 防止重复加载
            if (Result != EAssetResult.None)
            {
                LogSystem.Log(ELogType.Warning, $"Asset {ResName} is already load.");
                return;
            }

            if (_cacheLoader != null)
            {
                LogSystem.Log(ELogType.Warning, $"Asset  {ResName}  loader must null.");
                return;
            }

            ResName          = resName;
            Result           = EAssetResult.Loading;
            _prepareCallback = prepareCallbcak;
            _cacheLoader     = AssetSystem.LoadAssetFile(ResName, AssetType, OnAssetFileLoad);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 异步加载
        /// </summary>
        public void Load(string resName, System.Action <Asset> userCallbcak)
        {
            // 防止重复加载
            if (Result != EAssetResult.None)
            {
                LogSystem.Log(ELogType.Warning, $"Asset {ResName} is already load.");
                return;
            }

            if (_cacheLoader != null)
            {
                LogSystem.Log(ELogType.Warning, $"Asset  {ResName}  loader must null.");
                return;
            }

            ResName       = resName;
            Result        = EAssetResult.Loading;
            _userCallback = userCallbcak;
            bool isStreamScene = this is AssetScene;

            _cacheLoader = AssetSystem.LoadAssetFile(ResName, isStreamScene, OnAssetFileLoad);
        }
Exemplo n.º 7
0
        private void OnAssetFileLoad(AssetFileLoader loader)
        {
            // 注意 : 如果在加载过程中调用UnLoad,等资源文件加载完毕时不再执行后续准备工作。
            if (Result != EAssetResult.Loading)
            {
                return;
            }

            if (loader.LoadState == EAssetFileLoadState.LoadAssetFileOK)
            {
                loader.LoadMainAsset(AssetType, OnAssetObjectLoad);
            }
            else
            {
                Result = EAssetResult.Failed;

                // 回调接口
                if (_prepareCallback != null)
                {
                    _prepareCallback.Invoke(this, Result);
                }
            }
        }
Exemplo n.º 8
0
        private static IEnumerator CoLoadAssetBundleAsync(string relativePath, ResourceDepRequest request)
        {
            // manifest
            string manifestPath = ResourceDepUtils.GetBuildPath(String.Format("{0}.manifest{1}", relativePath,
                                                                              AppEngine.GetConfig(KEngineDefaultConfigs.AssetBundleExt)));
            var manifestLoader = HotBytesLoader.Load(manifestPath, LoaderMode.Sync);

            while (!manifestLoader.IsCompleted)
            {
                yield return(null);
            }

            // manifest读取失败,可能根本没有manifest,是允许的
            if (manifestLoader.IsSuccess)
            {
                var manifestBytes = manifestLoader.Bytes;
                manifestLoader.Release(); // 释放掉文本字节
                string[] manifestList = GetManifestList(manifestBytes);
                for (var i = 0; i < manifestList.Length; i++)
                {
                    var depPath   = manifestList[i] + AppEngine.GetConfig(KEngineDefaultConfigs.AssetBundleExt);
                    var depLoader = AssetFileLoader.Load(depPath);
                    if (request.Loaders == null)
                    {
                        request.Loaders = new List <AbstractResourceLoader>();
                    }
                    request.Loaders.Add(depLoader);
                    while (!depLoader.IsCompleted)
                    {
                        yield return(null);
                    }
                }
            }
            string path =
                GetBuildPath(String.Format("{0}{1}", relativePath,
                                           AppEngine.GetConfig(KEngineDefaultConfigs.AssetBundleExt)));

            // 获取后缀名
            var ext = Path.GetExtension(relativePath);

            if (ext == ".unity" || ext == ".shader")
            {
                // Scene
                var sceneLoader = AssetBundleLoader.Load(path);

                if (request.Loaders == null)
                {
                    request.Loaders = new List <AbstractResourceLoader>();
                }
                request.Loaders.Add(sceneLoader);
                while (!sceneLoader.IsCompleted)
                {
                    yield return(null);
                }
            }
            else
            {
                var assetLoader = AssetFileLoader.Load(path);
                while (!assetLoader.IsCompleted)
                {
                    yield return(null);
                }
                request.Asset = assetLoader.Asset;
            }

            request.IsDone = true;
        }
Exemplo n.º 9
0
        /// <summary>
        /// 同步加载AssetBundle
        /// </summary>
        /// <param name="relativePath"></param>
        /// <returns></returns>
        public static Object LoadAssetBundleSync(string relativePath)
        {
            //CheckLoadShadersPrefab();
            // manifest
            string manifestPath = ResourceDepUtils.GetBuildPath(String.Format("{0}.manifest{1}", relativePath,
                                                                              AppEngine.GetConfig(KEngineDefaultConfigs.AssetBundleExt)));
            var manifestLoader = HotBytesLoader.Load(manifestPath, LoaderMode.Sync);
            //while (!manifestLoader.IsCompleted)
            //    yield return null;
            var manifestBytes = manifestLoader.Bytes;

            manifestLoader.Release(); // 释放掉文本字节
            if (manifestBytes != null)
            {
                var manifestList = GetManifestList(manifestBytes);
                for (var i = 0; i < manifestList.Length; i++)
                {
                    var depPath = manifestList[i] + AppEngine.GetConfig(KEngineDefaultConfigs.AssetBundleExt);
                    //var depLoader =
                    AssetFileLoader.Load(depPath);
                    //while (!depLoader.IsCompleted)
                    //{
                    //    yield return null;
                    //}

                    /*if (Application.isEditor)
                     * {
                     *  Log.Info("Load dep sync:{0}, from: {1}", depPath, relativePath);
                     * }*/
                }
            }
            else
            {
                Log.Warning("Cannot find Manifest: {0}", relativePath);
            }

            string path =
                GetBuildPath(String.Format("{0}{1}", relativePath,
                                           AppEngine.GetConfig(KEngineDefaultConfigs.AssetBundleExt)));

            //while (!assetLoader.IsCompleted)
            //    yield return null;
            // 获取后缀名
            var ext = Path.GetExtension(relativePath);

            if (ext == ".unity" || ext == ".shader")
            {
                // Scene
                //var sceneLoader =
                AssetBundleLoader.Load(path);
                //while (!sceneLoader.IsCompleted)
                //    yield return null;
                return(null);
            }
            else
            {
                var assetLoader = AssetFileLoader.Load(path);
                //while (!assetLoader.IsCompleted)
                //    yield return null;
                return(assetLoader.Asset);
            }
        }