/// <summary> ///刷新状态 /// </summary> public void Refesh() { /* * if(m_LoadCount < 1 && m_UnLoadCount < 1)//gc * { * if (UnLoadCount > m_Refesh) * { * UnLoadCount = 0; * Resources.UnloadUnusedAssets(); * } * return; * }*/ if (!m_ImmediateUnLoad || m_LoadCount > 0 || m_UnLoadCount < 1) //是否等待加载完成 { return; } foreach (var value in m_LoadAsset) { LoadAssetBase loadAsset = value.Value; if (loadAsset.ReadyState == Loadm_State.Unloaded)//卸载标记要卸载的 { loadAsset.ReadyState = Loadm_State.None; loadAsset.UnLoad(); m_UnLoadCount--; } } }
/// <summary> ///卸载 /// </summary> public void AddUnLoadAsset(UnityLODGroupFast fast) { int id = fast.GetInstanceID(); LoadAssetBase loadAsset = null; fast.SetEnableApply(); if (!m_LoadAsset.TryGetValue(id, out loadAsset)) { return; } switch (loadAsset.State) { case Loadm_State.Loading: m_LoadCount--; loadAsset.UnLoad(); break; case Loadm_State.Instantiated: if (!m_ImmediateUnLoad) //不等待 { loadAsset.UnLoad(); break; } m_UnLoadCount++; loadAsset.ReadyState = Loadm_State.Unloaded; break; case Loadm_State.Unloaded: case Loadm_State.UnLoading: break; } }
//提供池子里的给过去 public override LoadAssetBase Spawn() { if (m_Vector == null) { GameObject obj = new GameObject(s_VectorName); m_Vector = obj.AddComponent <LoadAssetVector>(); } LoadAssetBase t = null; if (_freeObjs.Count <= 0) { //本套资源流式装卸用LoadAsset,如果自己写的请继承LoadAssetBase类,然后new你的这个类 t = new LoadAsset(m_Vector); //t = new LoadAssetBase(m_Vector); _busyObjs.Add(t); t.OnEnable(); return(t); } t = _freeObjs[0]; _freeObjs.RemoveAt(0); _busyObjs.Add(t); t.OnEnable(); return(t); }
//回收到池子里 public override void UnSpawn(LoadAssetBase obj) { if (obj == null) { return; } if (!_freeObjs.Contains(obj)) { _freeObjs.Add(obj); } if (_busyObjs.Contains(obj)) { _busyObjs.Remove(obj); } }
/// <summary> ///加载 /// </summary> public void AddLoadAsset(UnityLODGroupFast fast) { int id = fast.GetInstanceID(); LoadAssetBase loadAsset = null; fast.SetEnableApply(); if (!m_LoadAsset.TryGetValue(id, out loadAsset)) { loadAsset = s_LoadAssetPool.Spawn(); m_LoadAsset.Add(id, loadAsset); } //要准备卸载,把状态改变回来 if (loadAsset.ReadyState == Loadm_State.Unloaded) { m_UnLoadCount--; } loadAsset.ReadyState = Loadm_State.None; switch (loadAsset.State) { case Loadm_State.Instantiated: loadAsset.StopCoroutines(); break; case Loadm_State.Loading: break; case Loadm_State.Unloaded: m_LoadCount++; loadAsset.Load(fast, this); break; case Loadm_State.UnLoading: m_LoadCount++; loadAsset.StopCoroutines(); loadAsset.Load(null, null); break; } }
//回收到池子里 public virtual void UnSpawn(LoadAssetBase obj) { }
/// <summary> ///节点卸载完毕 /// </summary> public void Unloaded(LoadAssetBase loadAsset, UnityLODGroupFast fast) { s_LoadAssetPool.UnSpawn(loadAsset); m_LoadAsset.Remove(fast.GetInstanceID()); //UnLoadCount++; }
/// <summary> ///节点实例化完毕 /// </summary> public void Instantiated(LoadAssetBase loadAsset, UnityLODGroupFast fast) { m_LoadCount--; }