Пример #1
0
 /// <summary>
 /// 同步加载assetbundle 和dependencies
 /// </summary>
 /// <param name="assetBundleName"></param>
 /// <returns></returns>
 public void LoadBundle(string assetBundleName)
 {
     assetBundleName = assetBundleName.ToLower();
     string[] dependencies = ResourcesHelper.GetSortedDependencies(assetBundleName);
     foreach (string dependency in dependencies)
     {
         if (string.IsNullOrEmpty(dependency))
         {
             continue;
         }
         this.LoadOneBundle(dependency);
     }
 }
Пример #2
0
 private async Task RealLoadBundleAsync(string assetBundleName)
 {
     assetBundleName = assetBundleName.ToLower();
     string[] dependencies = ResourcesHelper.GetSortedDependencies(assetBundleName);
     foreach (string dependency in dependencies)
     {
         if (string.IsNullOrEmpty(dependency))
         {
             continue;
         }
         await this.LoadOneBundleAsync(dependency);
     }
 }
Пример #3
0
    public void UnloadBundle(string assetBundleName)
    {
        //暂时屏蔽卸载
        if (noUnloadBundle)
        {
            return;
        }
        assetBundleName = assetBundleName.ToLower();
        string[] dependencies = ResourcesHelper.GetSortedDependencies(assetBundleName);

        //Log.Debug($"-----------dep unload {assetBundleName} dep: {dependencies.ToList().ListToString()}");
        foreach (string dependency in dependencies)
        {
            this.UnloadOneBundle(dependency);
        }
    }
Пример #4
0
    /// <summary>
    /// 同步加载assetbundle
    /// </summary>
    /// <param name="assetBundleName"></param>
    /// <returns></returns>
    public async Task LoadBundleAsync <T>(string assetBundleName) where T : UnityEngine.Object
    {
        assetBundleName = assetBundleName.ToLower();
        string[] dependencies = ResourcesHelper.GetSortedDependencies(assetBundleName);

        //Log.Debug($"-----------dep load {assetBundleName} dep: {dependencies.ToList().ListToString()}");
        foreach (string dependency in dependencies)
        {
            if (string.IsNullOrEmpty(dependency))
            {
                continue;
            }
            if (assetBundleName.Equals(dependency))
            {
                await this.LoadOneBundleAsync <T>(dependency);
            }
            else
            {
                await this.LoadOneBundleAsync(dependency);
            }
        }
    }
Пример #5
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="sceneType"></param>
    /// <param name="isCloseLoadingAfter">为true需要自己关闭进度条</param>
    /// <returns></returns>
    public async Task ChangeSceneAsync(EnumScene sceneType, bool isCloseLoadingAfter = false)
    {
        //加载进度条
        await UIComponent.CreateUIAsync(UIType.UISceneLoading, isTopCanvas : true);

        uISceneLoadingComponent.Reset();

        //关闭聊天相关界面
        ChatTool.CloseChat();
        var scencePath = EnumScene.Empty.ToString();

        _currSceneTage = sceneType;
        //加载空场景
        scencePath = "Scenes/" + scencePath;
        SceneManager.LoadScene(scencePath);
        var bundleType = sceneType.ToString();

        if (sceneType != EnumScene.Empty)//空场景为退出到大厅
        {
            List <string> bundleNameList = new List <string>();

            if (preLoadMap.ContainsKey(sceneType))
            {
                bundleNameList.AddRange(preLoadMap[sceneType]);
            }
            //加上自己的场景ab包
            var sceneBundleName = ABManager.GetBundleNameByAssetNameAndType(sceneType.ToString(), typeof(GameObject));
            bundleNameList.Add($"{sceneBundleName}");

            List <string> allBundleNameList = new List <string>();
            foreach (var bundleName in bundleNameList)
            {
                string[] dependencies = ResourcesHelper.GetSortedDependencies(bundleName.ToLower());
                if (dependencies != null)
                {
                    foreach (var item in dependencies)
                    {
                        if (allBundleNameList.Contains(item))
                        {
                            continue;
                        }
                        allBundleNameList.Add(item);
                    }
                }
            }
            ResourcesComponent resourcesComponent = ResourcesComponent.instance;
            for (int i = 0; i < allBundleNameList.Count; i++)
            {
                await resourcesComponent.LoadOneBundleAsync(allBundleNameList[i], (real) => UpdateProgress(i, allBundleNameList.Count, real, allBundleNameList[i]));
            }
        }


        await AddSceneAsyncTask(bundleType, LoadSceneMode.Single);

        //await StaticData.CreateChatMini();
        if (isCloseLoadingAfter == false)
        {
            UIComponent.HideUI(UIType.UISceneLoading);
        }
    }