Exemple #1
0
    public IEnumerator LoadAssetBundle(string abName)
    {
        //ab包依赖关系的建立
        if (!m_relationDict.ContainsKey(abName))
        {
            ABRelation tempRelation = new ABRelation(abName);
            m_relationDict.Add(abName, tempRelation);
        }
        ABRelation abRelation = m_relationDict[abName];

        //得到ab包所有的依赖关系(查询清单文件)
        string[] strDependenceArr = ABManifestLoader.Instance.GetAllDependices(abName);
        for (int i = 0; i < strDependenceArr.Length; i++)
        {
            //添加依赖项
            abRelation.AddDependence(strDependenceArr[i]);
            //添加引用项
            yield return(LoadReferenceAB(strDependenceArr[i], abName));
        }

        //加载ab包
        if (m_singleABDict.ContainsKey(abName))
        {
            yield return(m_singleABDict[abName].LoadAssetBundle());
        }
        else
        {
            m_currentSingleABLoader = new SingleABLoader(abName, CompleteLoadABCallBack);
            m_singleABDict.Add(abName, m_currentSingleABLoader);
            yield return(m_currentSingleABLoader.LoadAssetBundle());
        }
    }
Exemple #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);
    }
Exemple #3
0
    /// <summary>
    /// 加载引用AB包
    /// </summary>
    /// <param name="abName">AB包的名称</param>
    /// <param name="refABName">被引用AB包的名称</param>
    /// <returns></returns>
    private IEnumerator LoadRefence(string abName, string refABName)
    {
        if (dicABRelation.ContainsKey(abName))
        {
            ABRelation tmpABRelation = dicABRelation[abName];
            tmpABRelation.AddReference(refABName);
        }
        else
        {
            ABRelation tmpABRelation = new ABRelation(abName);
            tmpABRelation.AddReference(refABName);
            dicABRelation.Add(abName, tmpABRelation);

            //开始加载依赖的包
            yield return(LoadAssetBundle(abName));
        }
        yield return(null);
    }
Exemple #4
0
    /// <summary>
    /// 加载引用ab包
    /// </summary>
    /// <param name="abName">ab包名</param>
    /// <param name="refName">被引用ab包名称</param>
    /// <returns></returns>
    private IEnumerator LoadReferenceAB(string abName, string refName)
    {
        //ab包已经被加载
        if (m_relationDict.ContainsKey(abName))
        {
            ABRelation tempRelation = m_relationDict[abName];
            //添加ab包引用关系
            tempRelation.AddReference(refName);
        }
        else
        {
            ABRelation temp = new ABRelation(abName);
            temp.AddReference(refName);
            m_relationDict.Add(abName, temp);

            //开始加载依赖的包
            yield return(LoadAssetBundle(abName));
        }
    }
Exemple #5
0
 /// <summary>
 /// 这是卸载ab包 卸载一个 需要处理其依赖关系
 /// </summary>
 /// <param name="abName"></param>
 public void DisposeBundle(string abName)
 {
     if (m_singleABDict.ContainsKey(abName))
     {
         ABRelation    relation = m_relationDict[abName];
         List <string> def      = relation.GetAllDependence();
         for (int i = 0; i < def.Count; i++)
         {
             if (m_relationDict.ContainsKey(def[i]))
             {
                 ABRelation temp = m_relationDict[def[i]];
                 if (temp.RemoveReference(abName))
                 {
                     DisposeBundle(temp.GetABName());
                 }
             }
         }
         if (relation.GetAllReference().Count == 0)
         {
             m_singleABDict[abName].Dispose();
             m_relationDict.Remove(abName);
         }
     }
 }