public GameResPackage(string packname, string tag, bool isExist = true) { PackName = packname; m_state = ENState.enNone; m_isExist = isExist; if (tag == "PreLoad") { m_loadType = ENLoadType.enPreLoad; } }
//卸载 public void Unload() { try { if (m_wLoad != null) { if (m_wLoad.error == null) { m_assetbundle.Unload(false); //Debug.LogWarning("unload, packname:" + PackName); } } } catch (System.Exception e) { Debug.LogError("package clean fail, packname:" + PackName + ",error:" + e.Message); } m_assetbundle = null; m_wLoad = null; m_state = ENState.enNone; }
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; }