static void ResLoadCallBack(ResConfigData cof, ResNode res, System.Object UserDataObj) { SkinModelInfo info = UserDataObj as SkinModelInfo; if (null == info) { Debug.LogError("皮肤异步加载严重错误--ResLoadCallBack"); return; } Skin sk = null; if (m_SkinMap.TryGetValue(info.nSkinID, out sk)) { //已经有这个皮肤,不加载了,这种情况是被同步冲掉了 if (sk.isValid) { return; } } //if(null == res || !res.IsValid()) //{ // RemoveAllCallBack(info.nSkinID); //} BuildSkin(info, res, true); }
/// <summary> /// 加载模型 /// </summary> /// <param name="SkinID">模型ID</param> /// <param name="strPrefabPath">模型路径</param> /// <returns>是否成功</returns> private static Skin LoadSkinSynchronous(SkinModelInfo info) { Skin reslut = null; //已经有这个皮肤,不加载了 if (m_SkinMap.TryGetValue(info.nSkinID, out reslut)) { return(reslut); } ResNode obj = AssetBundleManager.GetAssets(AssetType.Asset_Prefab, info.strPatch); if (null != obj) { reslut = BuildSkin(info, obj, obj.isAsync); if (reslut != null) { reslut.AddRef(); SkinAsyncLoadingObj asyncObj = null; if (m_AsyncLoadSkinRequestTable.TryGetValue(info.nSkinID, out asyncObj)) { reslut.AddRef(asyncObj.ReferenceCount); asyncObj.ReferenceCount = 0; } } return(reslut); } else { obj = null; Trace.Warning("加载皮肤模型失败,ID:" + info.nSkinID + ",路径:" + info.strPatch + ",请[--策划--]检查配置"); return(reslut); } }
private static SkinModelInfo GetSkinInfoFromEntityViewItem(EntityViewItem ite) { SkinModelInfo inf = new SkinModelInfo(); inf.nSkinID = ite.nSkinID; inf.strPatch = ite.szModelPath; inf.SkinType = (ENTITY_TYPE)ite.EntityType; inf.fSkinScale = ite.fSkinScale; return(inf); }
/// <summary> /// 加载皮肤 /// </summary> /// <param name="ite">实体信息</param> /// <returns></returns> public static bool LoadSkin(EntityViewItem ite) { SkinModelInfo info = GetSkinInfoFromEntityViewItem(ite); if (m_SkinConfigMap.ContainsKey(info.nSkinID)) { Trace.LogWarning("加载皮肤模型重复,ID:" + info.nSkinID + ",路径:" + info.strPatch + ",请请[--策划--]删除重复的ID"); return(true); } m_SkinConfigMap.Add(info.nSkinID, info); return(true); }
private static Skin BuildSkin(SkinModelInfo info, ResNode obj, bool isAsync) { Skin sk = null; if (!m_SkinMap.TryGetValue(info.nSkinID, out sk)) { sk = new Skin(); sk.nSkinID = info.nSkinID; m_SkinMap.Add(info.nSkinID, sk); } if (obj != null) { sk.SkinType = info.SkinType; sk.fSkinScale = info.fSkinScale; sk.ResSkinObj = obj; sk.isStaticSkin = info.strPatch.Contains(staticSkinPatch); sk.isAsync = isAsync; if (!CheckSkinValid(sk)) { if (!isAsync) { AssetBundleManager.DeleteAssets(ref obj, ImmdieateUnLoadSkin); } else { AssetBundleManager.DeleteAssetsAsync(ref obj, ResLoadCallBack, ImmdieateUnLoadSkin); } sk.isValid = false; obj = null; return(sk); } sk.isValid = true; obj = null; return(sk); } else { sk.isValid = false; Debug.LogWarning("加载皮肤模型失败,ID:" + info.nSkinID + ",路径:" + info.strPatch + ",请[--策划--]检查配置"); return(null); } }
/// <summary> /// 取得皮肤 /// </summary> /// <param name="SkinID"></param> /// <param name="sk"></param> /// <returns></returns> public static SkinInstance GetSkin(int SkinID) { if (null == m_SkinConfigMap) { return(null); } Skin Reslut = null; Reslut = GetSkinFromCache(SkinID); if (Reslut != null) { Reslut.AddRef(); m_SkinMap.Add(Reslut.nSkinID, Reslut); return(Reslut.Instantiate_Main()); } //先看看这个皮肤是不是有这个皮肤 if (m_SkinConfigMap.ContainsKey(SkinID)) { //再看看这个皮肤是否被加载了 if (m_SkinMap.ContainsKey(SkinID)) { Reslut = m_SkinMap[SkinID]; Reslut.AddRef(); return(Reslut.Instantiate_Main()); } //没有就加载皮肤 SkinModelInfo info = m_SkinConfigMap[SkinID]; Skin sk = LoadSkinSynchronous(info); if (null != sk && sk.isValid) { return(sk.Instantiate_Main()); } return(null); } else { Trace.LogWarning("找不到皮肤配置,ID:" + SkinID); } return(null); }
/// <summary> /// 异步取得Skin /// </summary> /// <param name="SkinID"></param> /// <param name="CallBack"></param> /// <returns></returns> private static bool GetSkinAsyncImpl(int SkinID, System.Action <Skin> CallBack, AssetLoadPriority priority = AssetLoadPriority.Priority_Normal) { SkinModelInfo info = null; if (!m_SkinConfigMap.TryGetValue(SkinID, out info)) { Debug.LogWarning("找不到皮肤配置,ID:" + SkinID); return(false); } Skin sk = null; SkinAsyncLoadingObj loadingObj = null; sk = GetSkinFromCache(SkinID); if (sk != null) { sk.AddRef(); m_SkinMap.Add(sk.nSkinID, sk); if (m_AsyncLoadSkinRequestTable.TryGetValue(SkinID, out loadingObj)) { loadingObj.callbackList.Add(CallBack); } else { loadingObj = new SkinAsyncLoadingObj(); loadingObj.callbackList.Add(CallBack); m_AsyncLoadSkinRequestTable.Add(SkinID, loadingObj); } return(true); } if (m_SkinMap.TryGetValue(SkinID, out sk)) { if (m_AsyncLoadSkinRequestTable.TryGetValue(SkinID, out loadingObj)) { sk.AddRef(); loadingObj.callbackList.Add(CallBack); } else { loadingObj = new SkinAsyncLoadingObj(); loadingObj.callbackList.Add(CallBack); sk.AddRef(); m_AsyncLoadSkinRequestTable.Add(SkinID, loadingObj); } return(true); } if (m_AsyncLoadSkinRequestTable.TryGetValue(SkinID, out loadingObj)) { loadingObj.ReferenceCount++; loadingObj.callbackList.Add(CallBack); } else { ResNode obj = AssetBundleManager.GetAssetsAsync(AssetType.Asset_Prefab, ResLoadCallBack, info.strPatch, false, info, priority); if (obj != null) { loadingObj = new SkinAsyncLoadingObj(); loadingObj.callbackList.Add(CallBack); loadingObj.ReferenceCount++; loadingObj.loadingResNode = obj; m_AsyncLoadSkinRequestTable.Add(SkinID, loadingObj); } else { Trace.Warning("加载皮肤模型失败,ID:" + info.nSkinID + ",路径:" + info.strPatch + ",请[--策划--]检查配置"); return(false); } } return(true); }