예제 #1
0
        public async Task AddPackageAsync(string type)
        {
            if (Define.IsEditorMode)
            {
                await Task.CompletedTask;

                UIPackage uiPackage = UIPackage.AddPackage($"{FUI_PACKAGE_DIR}/{type}");

                packages.Add(type, uiPackage);
            }
            else
            {
                string             uiBundleDesName    = AssetBundleHelper.StringToAB($"{type}_fui");
                string             uiBundleResName    = AssetBundleHelper.StringToAB(type);
                ResourcesComponent resourcesComponent = Game.Scene.GetComponent <ResourcesComponent>();
                await resourcesComponent.LoadBundleAsync(uiBundleDesName);

                await resourcesComponent.LoadBundleAsync(uiBundleResName);

                AssetBundle desAssetBundle = resourcesComponent.GetAssetBundle(uiBundleDesName);
                AssetBundle resAssetBundle = resourcesComponent.GetAssetBundle(uiBundleResName);
                UIPackage   uiPackage      = UIPackage.AddPackage(desAssetBundle, resAssetBundle);

                packages.Add(type, uiPackage);
            }
        }
예제 #2
0
        private void UnloadOneBundle(string assetBundleName)
        {
            assetBundleName = AssetBundleHelper.BundleNameToLower(assetBundleName);

            ABInfo abInfo;

            if (!bundles.TryGetValue(assetBundleName, out abInfo))
            {
                throw new Exception($"not found assetBundle: {assetBundleName}");
            }

            //Log.Debug($"---------- unload one bundle {assetBundleName} refcount: {abInfo.RefCount - 1}");

            --abInfo.RefCount;

            if (abInfo.RefCount > 0)
            {
                return;
            }


            bundles.Remove(assetBundleName);
            resourceCache.Remove(assetBundleName);
            abInfo.Dispose();
            //Log.Debug($"cache count: {this.cacheDictionary.Count}");
        }
예제 #3
0
        public AssetBundle GetAssetBundle(string abName)
        {
            ABInfo abInfo;

            if (!bundles.TryGetValue(AssetBundleHelper.BundleNameToLower(abName), out abInfo))
            {
                throw new Exception($"not found bundle: {abName}");
            }
            return(abInfo.AssetBundle);
        }
예제 #4
0
        public void UnloadBundle(string assetBundleName)
        {
            assetBundleName = AssetBundleHelper.BundleNameToLower(assetBundleName);

            string[] dependencies = DependenciesHelper.GetSortedDependencies(assetBundleName);

            //Log.Debug($"-----------dep unload {assetBundleName} dep: {dependencies.ToList().ListToString()}");
            foreach (string dependency in dependencies)
            {
                UnloadOneBundle(dependency);
            }
        }
예제 #5
0
        public void AddResource(string bundleName, string assetName, UnityEngine.Object resource)
        {
            Dictionary <string, UnityEngine.Object> dict;

            if (!resourceCache.TryGetValue(AssetBundleHelper.BundleNameToLower(bundleName), out dict))
            {
                dict = new Dictionary <string, UnityEngine.Object>();
                resourceCache[bundleName] = dict;
            }

            dict[assetName] = resource;
        }
예제 #6
0
        public UnityEngine.Object GetAsset(string bundleName, string prefab)
        {
            Dictionary <string, UnityEngine.Object> dict;

            if (!resourceCache.TryGetValue(AssetBundleHelper.BundleNameToLower(bundleName), out dict))
            {
                throw new Exception($"not found asset: {bundleName} {prefab}");
            }

            UnityEngine.Object resource;

            if (!dict.TryGetValue(prefab, out resource))
            {
                throw new Exception($"not found asset: {bundleName} {prefab}");
            }

            return(resource);
        }
예제 #7
0
        public void RemovePackage(string type)
        {
            UIPackage package;

            if (packages.TryGetValue(type, out package))
            {
                var p = UIPackage.GetByName(package.name);

                if (p != null)
                {
                    UIPackage.RemovePackage(package.name);
                }

                packages.Remove(package.name);
            }

            if (!Define.IsEditorMode)
            {
                string uiBundleDesName = AssetBundleHelper.StringToAB($"{type}_fui");
                string uiBundleResName = AssetBundleHelper.StringToAB(type);
                Game.Scene.GetComponent <ResourcesComponent>().UnloadBundle(uiBundleDesName);
                Game.Scene.GetComponent <ResourcesComponent>().UnloadBundle(uiBundleResName);
            }
        }