Exemplo n.º 1
0
    //异步加载资源obj
    public IEnumerator LoadObjectAsync(string path, AsyncLoadObjectData data)
    {
        m_canCleanCount++;
        //load package
        AsyncLoadPackageData packageData = new AsyncLoadPackageData();
        IEnumerator          e           = LoadPackageAsync(packageData);

        while (true)
        {
            e.MoveNext();
            if (packageData.m_isFinish)
            {
                break;
            }
            yield return(e.Current);
        }
        //load object
        if (m_state == ENState.enSucced)
        {
            if (m_assetbundle != null)
            {
                if (!m_assetbundle.Contains(path))
                {
                    Debug.LogWarning("asset bundle not contains res,name:" + path);
                }

                data.m_obj = m_assetbundle.LoadAsset(path);
                //
                if (m_loadType != ENLoadType.enPreLoad)
                {
                    GameResManager.Singleton.AddDelayCleanPackage(this);
                }
            }
            else
            {
                Debug.LogWarning("m_assetbundle is null, path:" + path);
            }
        }
        m_canCleanCount--;
        data.m_isFinish = true;
    }
Exemplo n.º 2
0
 public IEnumerator LoadPackageAsync(AsyncLoadPackageData data)
 {
     m_beUsedCount++;
     if (m_state == ENState.enNone || m_state == ENState.enFailed)
     {
         m_state = ENState.enLoading;
         int dependFinishCount = 0;
         foreach (var item in DependPack)
         {//load depend
             AsyncLoadPackageData packageData = new AsyncLoadPackageData();
             IEnumerator          e           = item.LoadPackageAsync(packageData);
             while (true)
             {
                 e.MoveNext();
                 if (packageData.m_isFinish)
                 {
                     break;
                 }
                 yield return(e.Current);
             }
             ++dependFinishCount;
         }
         if (m_isExist)
         {
             string url = ResPath.WLocalURLPrefix + ResPath.LocalPackagePath + PackName;
             if (m_wLoad == null)
             {
                 m_wLoad = new WWW(url);
             }
             while (!m_wLoad.isDone)
             {
                 yield return(m_wLoad);
             }
             if (null != m_wLoad.error)
             {
                 Debug.LogWarning("WWW load fail, url:" + url + ",error:" + m_wLoad.error);
                 m_state = ENState.enFailed;
                 m_wLoad = null;
             }
             else
             {
                 m_assetbundle = m_wLoad.assetBundle;
                 if (m_assetbundle == null)
                 {
                     Debug.LogWarning("load package fail, assetbundle is null");
                 }
                 else
                 {
                     //UnityEngine.Object[] objList = m_assetbundle.LoadAll();
                     //foreach (var item in objList)
                     //{
                     //}
                     m_state = ENState.enSucced;
                     Debug.Log("load package succ, packname:" + PackName);
                 }
             }
         }
         else
         {
             while (true)
             {
                 if (dependFinishCount == DependPack.Count)
                 {
                     break;
                 }
                 yield return(new WaitForSeconds(0.1f));
             }
             m_state = ENState.enSucced;
             Debug.Log("load package is not exist, packname:" + PackName);
         }
     }
     if (m_state == ENState.enLoading)
     {
         while (true)
         {
             if (m_state != ENState.enLoading)
             {
                 break;
             }
             yield return(new WaitForSeconds(0.5f));
         }
     }
     data.m_isFinish = true;
 }