//异步加载资源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; }
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; }