Пример #1
0
    /// <summary>
    /// 下载AB包
    /// </summary>
    /// <param name="sceneName"></param>
    /// <param name="abName"></param>
    /// <param name="delLoadComplete"></param>
    /// <returns></returns>
    public IEnumerator LoadAssetBundlePack(string sceneName, string abName, DelLoadComplete delLoadComplete)
    {
        if (string.IsNullOrEmpty(sceneName) || string.IsNullOrEmpty(abName))
        {
            Debug.LogError("sceneName   检查+abName    检查");
            yield return(null);
        }
        while (!ABManifestLoader.GetInstance().IsLoadFinish)
        {
            yield return(null);
        }

        manifesObj = ABManifestLoader.GetInstance().GetABManifest();
        if (manifesObj == null)
        {
            Debug.LogError("请先加载清单文件");
            yield return(null);
        }
        if (!_dicAllScene.ContainsKey(sceneName))
        {
            MultiABMgr multiABMgr = new MultiABMgr(sceneName, abName, delLoadComplete);
            _dicAllScene.Add(sceneName, multiABMgr);
        }
        MultiABMgr tmpmultiABMgr = _dicAllScene[sceneName];

        if (tmpmultiABMgr == null)
        {
            Debug.LogError("tmpmultiABMgr  is  null");
        }
        yield return(tmpmultiABMgr.LoadAssetBundle(abName));
    }
Пример #2
0
    //加载AB包
    public IEnumerator LoadAssetBundle(string abName)
    {
        //AB包关系的建立
        if (!dicABRelation.ContainsKey(abName))
        {
            ABRelation aBRelationObj = new ABRelation(abName);
            dicABRelation.Add(abName, aBRelationObj);
        }
        ABRelation tmpABRelation = dicABRelation[abName];

        //得到所有的依赖关系
        string[] dependencearray = ABManifestLoader.GetInstance().RetrivalDependence(abName);
        foreach (string item_dependence in dependencearray)
        {
            //添加依赖
            tmpABRelation.AddDependence(item_dependence);
            //添加引用
            yield return(LoadRefence(item_dependence, abName));
        }
        //加载
        if (dicSingleABLoader.ContainsKey(abName))
        {
            yield return(dicSingleABLoader[abName].LoadAssetBundle());
        }
        else
        {
            curSingleABLoader = new SingleABLoader(abName, CompleteAB);
            dicSingleABLoader.Add(abName, curSingleABLoader);
            yield return(curSingleABLoader.LoadAssetBundle());
        }
        yield return(null);
    }
Пример #3
0
 public static ABManifestLoader GetInstance()
 {
     if (_Instance == null)
     {
         _Instance = new ABManifestLoader();
     }
     return(_Instance);
 }
Пример #4
0
        private IEnumerator Initialize()
        {
            foreach (var abName in PreloadingList)
            {
                var sceneName = abName.Substring(0, abName.IndexOf("/"));
                yield return(AssetBundleManager.GetInstance().LoadAssetBundle(sceneName, abName));
            }

            LuaDefine.LuaEnv.AddLoader(CustomizeLoader);
            LuaDefine.LuaEnv.DoString("require 'LuaCore/Scripts/LuaInstaller'");
            LuaDefine.LuaEnv.Global.Get("InstallerEnv", out InstallerEnv);
            InstallerEnv.Set("self", this);
            InstallerEnv.Set("Container", Container);
            InstallerEnv.Get("Initialize", out luaInitialize);
            InstallerEnv.Get("OnSceneLoaded", out luaOnSceneLoaded);
            InstallerEnv.Get("OnEnable", out luaOnEnable);
            InstallerEnv.Get("Update", out luaUpdate);
            InstallerEnv.Get("OnDisbale", out luaOnDisable);

            luaInitialize?.Invoke();

            while (ABLoaderManager.GetDownloadProgress() < 1)
            {
                yield return(null);
            }

            var manifest = ABManifestLoader.GetInstance().GetABManifest();

            foreach (var abName in ABManifestLoader.GetInstance().AssetBundleList)
            {
                var sceneName = abName.Substring(0, abName.IndexOf("/"));
                if (sceneName.StartsWith("lua"))
                {
                    yield return(StartCoroutine(AssetBundleManager.GetInstance().LoadAssetBundle(sceneName, abName)));
                }
            }

            isInitialized = true;

            for (int i = 0; i < SceneManager.sceneCount; i++)
            {
                OnSceneLoaded(SceneManager.GetSceneAt(i), i == 0 ? LoadSceneMode.Single : LoadSceneMode.Additive);
            }
        }
Пример #5
0
 private void Awake()
 {
     //加载Manifest清单文件
     StartCoroutine(ABManifestLoader.GetInstance().LoadManifestFile());
 }