示例#1
0
        public void Release()
        {
            referenceCount--;

            if (referenceCount == 0)
            {
                LoadState = AssetLoadState.Unload;

                //释放依赖
                assetLoader.UnloadAll();
                assetLoader.ReleaseAssetLoader();

                var assetBundle = asset as AssetBundle;
                if (assetBundle != null)
                {
                    assetBundle.Unload(true);
                }

                unloadCallback?.Invoke(Name);

                Clear();

                assetBundleLoadPool.Release(this);
            }
        }
示例#2
0
        public void LoadAssetSync(System.Action <Object> onLoaded)
        {
            switch (LoadState)
            {
            case AssetLoadState.NotLoad:

                LoadState = AssetLoadState.Loading;

                assetBundleCreateRequest = AssetBundle.LoadFromFileAsync(ABManifest.GetAssetBundleByAssetPath(assetPath));

                var directDependencies = ABManifest.AssetBundleManifest.GetDirectDependencies(ABManifest.GetAssetNameByAssetPath(assetPath));
                totalDirectDependecntCount = directDependencies.Length;
                foreach (var directDependent in directDependencies)
                {
                    assetLoader.LoadAssetBundleSync(directDependent, DirectDependentCallback);
                }
                this.onLoaded += onLoaded;

                break;

            case AssetLoadState.Loading:
            case AssetLoadState.Loaded:

                this.onLoaded += onLoaded;

                break;

            case AssetLoadState.Unload:
                Debug.LogError("资源已卸载,任在加载。");
                break;
            }
        }
示例#3
0
        private void ResourceRequestCompleted(AsyncOperation obj)
        {
            LoadState = AssetLoadState.Loaded;

            Asset           = resourceRequest.asset;
            resourceRequest = null;

            onLoaded?.Invoke(Asset);
            onLoaded = null;
        }
示例#4
0
        public void LoadAsset()
        {
            if (LoadState == AssetLoadState.NotLoad)
            {
                LoadState = AssetLoadState.Loading;

                Asset     = Resources.Load(this.assetPath, loadType);
                LoadState = AssetLoadState.Loaded;
            }
        }
示例#5
0
 protected virtual void Reset()
 {
     mAssetPath          = null;
     mUseCount           = 0;
     mAutoRelease        = true;
     mLoadState          = AssetLoadState.None;
     mErrorMessage       = string.Empty;
     LoadFinishCallback  = null;
     LoadSuccessCallback = null;
     LoadFailCallback    = null;
 }
示例#6
0
        public void LoadAsset()
        {
            if (LoadState == AssetLoadState.NotLoad)
            {
                LoadState = AssetLoadState.Loading;

                Asset = UnityEditor.AssetDatabase.LoadAssetAtPath(AssetPathConvertEditoPath(this.assetPath, loadType), loadType);

                LoadState = AssetLoadState.Loaded;
            }
        }
示例#7
0
        public void Initialize(string path, System.Type loadType, System.Action <string> unloadCallback)
        {
            referenceCount = 0;

            name      = path;
            assetPath = path.Substring("resources://".Length);

            LoadState = AssetLoadState.NotLoad;

            this.loadType = loadType;

            this.unloadCallback = unloadCallback;
        }
示例#8
0
        public void Initialize(string path, System.Type loadType, System.Action <string> unloadCallback)
        {
            referenceCount = 0;
            assetPath      = path;

            name = path;

            LoadState = AssetLoadState.NotLoad;

            this.loadType = loadType;

            this.unloadCallback = unloadCallback;

            assetLoader = AssetLoader.GetAssetLoader();
        }
示例#9
0
        private void AssetBundleRequest_completed(AsyncOperation asyncOperation)
        {
            LoadState = AssetLoadState.Loaded;

            var assetBundle = assetBundleCreateRequest.assetBundle;

            if (loadType.Equals(typeAB) == false)
            {
                asset = assetBundle.LoadAsset(System.IO.Path.GetFileName(this.assetPath), loadType);
            }
            assetBundleCreateRequest = null;

            onLoaded?.Invoke(asset);
            onLoaded = null;
        }
示例#10
0
        public void LoadAsset()
        {
            switch (LoadState)
            {
            case AssetLoadState.NotLoad:

                LoadState = AssetLoadState.Loading;

                string abName      = ABManifest.GetAssetBundleByAssetPath(assetPath);
                var    assetBundle = AssetBundle.LoadFromFile(abName);

                if (loadType.Equals(typeAB) == false)
                {
                    asset = assetBundle.LoadAsset(ABManifest.GetAssetNameByAssetPath(this.assetPath), loadType);
                }

                var directDependencies = ABManifest.AssetBundleManifest.GetDirectDependencies(System.IO.Path.GetFileName(abName));
                totalDirectDependecntCount = directDependencies.Length;
                foreach (var directDependent in directDependencies)
                {
                    assetLoader.LoadAssetBundle(directDependent);
                }

                LoadState = AssetLoadState.Loaded;

                break;

            case AssetLoadState.Loading:
                Debug.LogError("资源已在异步加载队列中,无法立即加载。AssetPath:" + this.assetPath);
                break;

            case AssetLoadState.Loaded:
                break;

            case AssetLoadState.Unload:
                Debug.LogError("资源已卸载,任在加载。");
                break;

            case AssetLoadState.LoadError:
                break;
            }
        }
示例#11
0
        public void Release()
        {
            referenceCount--;

            if (referenceCount == 0)
            {
                LoadState = AssetLoadState.Unload;

                if (Asset is GameObject == false)
                {
                    Resources.UnloadAsset(Asset);
                }

                unloadCallback?.Invoke(Name);

                Clear();

                editorLoadPool.Release(this);
            }
        }
示例#12
0
        public void LoadAssetSync(System.Action <Object> onLoaded)
        {
            switch (LoadState)
            {
            case AssetLoadState.NotLoad:
                LoadState                  = AssetLoadState.Loading;
                resourceRequest            = Resources.LoadAsync(assetPath, loadType);
                resourceRequest.completed += ResourceRequestCompleted;

                this.onLoaded += onLoaded;
                break;

            case AssetLoadState.Loading:
                this.onLoaded += onLoaded;
                break;

            case AssetLoadState.Loaded:
                onLoaded?.Invoke(Asset);
                break;
            }
        }