private static bool LoadDependenicesResourceAsync(ResConfigData pefabConfig, out PrefabDependenciesResNode dependenciesRes, out List <ResNode> RequestResList) { RequestResList = null; dependenciesRes = null; //取得依赖配置表 PrefabDependenicesResConfigData dependenciesConfig = null; int prefabID = GUIDToInstanceID(pefabConfig.AssetGUID); if (!m_PrefabDependenciesConfigTable.TryGetValue(pefabConfig.AssetGUID, out dependenciesConfig)) { Debug.LogWarning("预制体找不到对应的依赖配置:" + pefabConfig.AssetBundleName + "[" + pefabConfig.AssetName + "]"); return(false); } /*先来检测一下,看看是不是已经存在了资源加载,因为这是有BUG的。 * 理论上来说,没有被加载到,就不会有依赖资源被保存起来,如果发现目标资源没有被加载,但是 * 他的依赖资源被加载的情况,这就是bug,主要问题就出在释放的时候,没有释放掉对应的依赖资源 */ if (m_PrefabDependenciesResNodeTable.TryGetValue(prefabID, out dependenciesRes)) { Debug.LogWarning("!!!!!!!!!!!!!!天哪撸,出超级大bug了。资源系统出大问题了。这个问题,赶紧找程序解决!!!!!!!!:" + pefabConfig.AssetBundleName + "[" + pefabConfig.AssetName + "]"); return(false); } RequestResList = new List <ResNode>(); dependenciesRes = new PrefabDependenciesResNode(); List <ResNode> TempDependenceList = new List <ResNode>(); /*加载顺序是不能乱的,要是乱的话。你可以试试,只要有一个加载失败就退出*/ //先加载贴图,分 一下是Sprite还是普通图 foreach (string resGUID in dependenciesConfig.TextureResConfigDatas) { ResConfigData tex = GetDependenicesConfig(resGUID); if (null == tex) { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,依赖表中找不到资源,类型:[贴图]"); return(false); } ResNode currRes = null; bool b = IsUIAssetBundle(tex.AssetBundleName); if (b) { currRes = GetSpriteResourceAsync(tex, AsyncLoadDependenicesCallBack, null, pefabConfig.priority); } else { currRes = GetTextureResourceAsync(tex, AsyncLoadDependenicesCallBack, null, pefabConfig.priority); } if (null != currRes) { RequestResList.Add(currRes); dependenciesRes.TextureResNode.Add(currRes); } else { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,类型:[贴图],资源路径:" + tex.AssetBundleName + "--" + tex.AssetName); return(false); } } //再加载材质 foreach (string resGUID in dependenciesConfig.MaterialResConfigDatas) { ResConfigData tex = GetDependenicesConfig(resGUID); if (null == tex) { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,依赖表中找不到资源,类型:[Material]"); return(false); } ResNode currRes = GetMaterialResourceAsync(tex, AsyncLoadDependenicesCallBack, null, pefabConfig.priority); if (null != currRes) { RequestResList.Add(currRes); dependenciesRes.MaterialResNode.Add(currRes); } else { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,类型:[Material],资源路径:" + tex.AssetBundleName + "--" + tex.AssetName); return(false); } } //再加载AnimatorClip foreach (string resGUID in dependenciesConfig.AnimatonClipResConfigDatas) { ResConfigData tex = GetDependenicesConfig(resGUID); if (null == tex) { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,依赖表中找不到资源,类型:[AnimatorClip]"); return(false); } ResNode currRes = GetAnimationClipResourceAsync(tex, AsyncLoadDependenicesCallBack, null, pefabConfig.priority); if (null != currRes) { RequestResList.Add(currRes); dependenciesRes.AnimatonClipResNode.Add(currRes); } else { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,类型:[AnimatorClip],资源路径:" + tex.AssetBundleName + "--" + tex.AssetName); return(false); } } //再加载FBX foreach (string resGUID in dependenciesConfig.FBXResConfigDatas) { ResConfigData tex = GetDependenicesConfig(resGUID); if (null == tex) { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,依赖表中找不到资源,类型:[FBX]"); return(false); } ResNode currRes = GetFBXResourceAsync(tex, AsyncLoadDependenicesCallBack, null, pefabConfig.priority); if (null != currRes) { RequestResList.Add(currRes); dependenciesRes.FBXResNode.Add(currRes); } else { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,类型:[FBX],资源路径:" + tex.AssetBundleName + "--" + tex.AssetName); return(false); } } //再加载AnimatorController foreach (string resGUID in dependenciesConfig.AnimatorControllerResConfigDatas) { ResConfigData tex = GetDependenicesConfig(resGUID); if (null == tex) { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,依赖表中找不到资源,类型:[AnimatorController]"); return(false); } ResNode currRes = GetAnimatorControllerResourceAsync(tex, AsyncLoadDependenicesCallBack, null, pefabConfig.priority); if (null != currRes) { RequestResList.Add(currRes); dependenciesRes.AnimatorControllerResNode.Add(currRes); } else { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,类型:[AnimatorController],资源路径:" + tex.AssetBundleName + "--" + tex.AssetName); return(false); } } return(true); }
/// <summary> /// 只加载预制体的资源依赖 /// </summary> /// <param name="pefabConfig"></param> /// <returns></returns> private static bool LoadDependenicesResource(ResConfigData pefabConfig, out PrefabDependenciesResNode dependenciesRes) { int guid = GUIDToInstanceID(pefabConfig.AssetGUID); dependenciesRes = null; //取得依赖配置表 PrefabDependenicesResConfigData dependenciesConfig = null; if (!m_PrefabDependenciesConfigTable.TryGetValue(pefabConfig.AssetGUID, out dependenciesConfig)) { Debug.LogWarning("预制体找不到对应的依赖配置:" + pefabConfig.AssetBundleName + "[" + pefabConfig.AssetName + "]"); return(false); } if (m_PrefabDependenciesResNodeTable.TryGetValue(guid, out dependenciesRes)) { Debug.LogWarning("!!!!!!!!!!!!!!天哪撸,出超级大bug了。资源系统出大问题了。这个问题,赶紧找程序解决!!!!!!!!:" + pefabConfig.AssetBundleName + "[" + pefabConfig.AssetName + "]"); return(false); } dependenciesRes = new PrefabDependenciesResNode(); /*加载顺序是不能乱的,要是乱的话。你可以试试,只要有一个加载失败就退出*/ //先加载贴图,贴图要区分是Sprite还是普通的Texture foreach (string resGUID in dependenciesConfig.TextureResConfigDatas) { ResNode currRes = null; ResConfigData tex = GetDependenicesConfig(resGUID); if (null == tex) { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,依赖表中找不到资源,类型:[贴图]"); return(false); } if (IsUIAssetBundle(tex.AssetBundleName)) { currRes = GetSpriteResource(tex); } else { currRes = GetTextureResource(tex); } if (null != currRes && currRes.IsValid()) { dependenciesRes.TextureResNode.Add(currRes); } else { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,类型:[贴图],资源路径:" + tex.AssetBundleName + "--" + tex.AssetName); return(false); } } //再加载材质 foreach (string resGUID in dependenciesConfig.MaterialResConfigDatas) { ResConfigData tex = GetDependenicesConfig(resGUID); if (null == tex) { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,依赖表中找不到资源,类型:[Material]"); return(false); } ResNode currRes = GetMaterialResource(tex); if (null != currRes && currRes.IsValid()) { dependenciesRes.MaterialResNode.Add(currRes); } else { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,类型:[Material],资源路径:" + tex.AssetBundleName + "--" + tex.AssetName); return(false); } } //再加载AnimatorClip foreach (string resGUID in dependenciesConfig.AnimatonClipResConfigDatas) { ResConfigData tex = GetDependenicesConfig(resGUID); if (null == tex) { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,依赖表中找不到资源,类型:[AnimatorClip]"); return(false); } ResNode currRes = GetAnimationClipResource(tex); if (null != currRes && currRes.IsValid()) { dependenciesRes.AnimatonClipResNode.Add(currRes); } else { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,类型:[AnimatorClip],资源路径:" + tex.AssetBundleName + "--" + tex.AssetName); return(false); } } //再加载FBX foreach (string resGUID in dependenciesConfig.FBXResConfigDatas) { ResConfigData tex = GetDependenicesConfig(resGUID); if (null == tex) { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,依赖表中找不到资源,类型:[FBX]"); return(false); } ResNode currRes = GetFBXResource(tex); if (null != currRes && currRes.IsValid()) { dependenciesRes.FBXResNode.Add(currRes); } else { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,类型:[FBX],资源路径:" + tex.AssetBundleName + "--" + tex.AssetName); return(false); } } //再加载AnimatorController foreach (string resGUID in dependenciesConfig.AnimatorControllerResConfigDatas) { ResConfigData tex = GetDependenicesConfig(resGUID); if (null == tex) { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,依赖表中找不到资源,类型:[AnimatorController]"); return(false); } ResNode currRes = GetAnimatorControllerResource(tex); if (null != currRes && currRes.IsValid()) { dependenciesRes.AnimatorControllerResNode.Add(currRes); } else { Debug.LogWarning(pefabConfig.AssetName + "-预制体依赖资源加载失败,类型:[AnimatorController],资源路径:" + tex.AssetBundleName + "--" + tex.AssetName); return(false); } } return(true); }
private static void Export_PrefabSelfConfig(Dictionary <string, Dictionary <string, UnionResConfigData> > configTable = null, Dictionary <string, PrefabDependenicesResConfigData> depedenceResult = null) { string dic = System.IO.Path.GetDirectoryName(AssetBundleManager.GetPrefabConfigPath()); if (!System.IO.Directory.Exists(dic)) { System.IO.Directory.CreateDirectory(dic); } if (null == configTable || depedenceResult == null) { configTable = AssetBundleManager.PrefabConfigTable; depedenceResult = AssetBundleManager.PrefabDependenciesConfigTable; } StreamWriter writer = new StreamWriter(AssetBundleManager.GetPrefabConfigPath(), false, new System.Text.UTF8Encoding(true)); foreach (KeyValuePair <string, Dictionary <string, UnionResConfigData> > par in configTable) { foreach (KeyValuePair <string, UnionResConfigData> valpar in par.Value) { UnionResConfigData config = valpar.Value; //首先,取出预制的依赖配置 PrefabDependenicesResConfigData dependenicesData = null; if (!depedenceResult.TryGetValue(config.AssetGUID, out dependenicesData)) { //Debug.LogWarning("预制体:" + config.AssetName + ",没有资源依赖~"); } //先写入预制体信息,预制体信息格式为:包名,资源名,GUID,合并后的文件索引,其实位置,长度,贴图数量,FBX数量,AnimationClip数量,AnimatorController数量 string s = string.Empty; s += config.AssetBundleName; s += ","; s += config.AssetName; s += ","; s += config.AssetGUID; s += ","; s += config.unionIndx; s += ","; s += config.startIndex; s += ","; s += config.dataLength; s += ","; //这个预制体没有依赖的资源 if (null == dependenicesData) { //贴图 s += 0; s += ","; //fbx s += 0; s += ","; //clip s += 0; s += ","; //controller s += 0; s += ","; //shader s += 0; s += ","; //material s += 0; //然后就可以写入到文件了. writer.WriteLine(s); } else { s += dependenicesData.TextureResConfigDatas.Count; s += ","; s += dependenicesData.FBXResConfigDatas.Count; s += ","; s += dependenicesData.AnimatonClipResConfigDatas.Count; s += ","; s += dependenicesData.AnimatorControllerResConfigDatas.Count; s += ","; s += dependenicesData.ShaderResConfigDatas.Count; s += ","; s += dependenicesData.MaterialResConfigDatas.Count; //然后就可以写入到文件了. writer.WriteLine(s); /*写完依赖的数目之后,就可以另起一行,开始写入具体的数据*/ //先写入贴图 foreach (string cof in dependenicesData.TextureResConfigDatas) { writer.WriteLine(cof); } //再写FBX foreach (string cof in dependenicesData.FBXResConfigDatas) { writer.WriteLine(cof); } //再写clip foreach (string cof in dependenicesData.AnimatonClipResConfigDatas) { writer.WriteLine(cof); } //再写controller foreach (string cof in dependenicesData.AnimatorControllerResConfigDatas) { writer.WriteLine(cof); } //再写shader foreach (string cof in dependenicesData.ShaderResConfigDatas) { writer.WriteLine(cof); } //再写材质球 foreach (string cof in dependenicesData.MaterialResConfigDatas) { writer.WriteLine(cof); } } } } writer.Flush(); writer.Close(); }
public static void PushPrefabConfig(UnionResConfigData prefabConfig, List <string> TextureData, List <string> FBXData, List <string> ClipData, List <string> ControllerData, List <string> ShaderData, List <string> MaterialData) { if (null == prefabConfig) { return; } /*先添加到预制体表里去*/ Dictionary <string, UnionResConfigData> assetTable = null; UnionResConfigData cof; int InstanceID = GUIDToInstanceID(prefabConfig.AssetGUID); //如果这个预制体已经存在了,那么移除原来的预制体,再添加进去,存在多份一样的预制体信息 if (m_PrefabGUIDConfigTable.TryGetValue(InstanceID, out cof)) { //移除原来的 m_PrefabConfigTable[cof.AssetBundleName].Remove(m_PrefabGUIDConfigTable[InstanceID].AssetName); } else { m_PrefabGUIDConfigTable.Add(InstanceID, prefabConfig); } if (m_PrefabConfigTable.TryGetValue(prefabConfig.AssetBundleName, out assetTable)) { //对于已经存在的资源,则采取更新对应的资源 if (assetTable.ContainsKey(prefabConfig.AssetName)) { assetTable[prefabConfig.AssetName] = prefabConfig; } else { assetTable.Add(prefabConfig.AssetName, prefabConfig); } } else { assetTable = new Dictionary <string, UnionResConfigData>(); assetTable.Add(prefabConfig.AssetName, prefabConfig); m_PrefabConfigTable.Add(prefabConfig.AssetBundleName, assetTable); } bool isNeedToWriteDependenices = !(TextureData.Count == 0 && FBXData.Count == 0 && ClipData.Count == 0 && ControllerData.Count == 0 && ShaderData.Count == 0 && MaterialData.Count == 0); if (!isNeedToWriteDependenices) { //如果他不需要写入配置,那么检查一下原来是不是有,有的话直接移除 if (m_PrefabDependenciesConfigTable.ContainsKey(prefabConfig.AssetGUID)) { m_PrefabDependenciesConfigTable.Remove(prefabConfig.AssetGUID); } return; } //1.先创建类 PrefabDependenicesResConfigData dependenicesConfig = null; if (!m_PrefabDependenciesConfigTable.TryGetValue(prefabConfig.AssetGUID, out dependenicesConfig)) { dependenicesConfig = new PrefabDependenicesResConfigData(); m_PrefabDependenciesConfigTable.Add(prefabConfig.AssetGUID, dependenicesConfig); } else { //已经存在的,则清楚资源,更新 dependenicesConfig.TextureResConfigDatas.Clear(); dependenicesConfig.FBXResConfigDatas.Clear(); dependenicesConfig.AnimatonClipResConfigDatas.Clear(); dependenicesConfig.AnimatorControllerResConfigDatas.Clear(); dependenicesConfig.ShaderResConfigDatas.Clear(); dependenicesConfig.MaterialResConfigDatas.Clear(); } //先贴图 for (int i = 0; i < TextureData.Count; i++) { if (null != TextureData[i]) { dependenicesConfig.TextureResConfigDatas.Add(TextureData[i]); } } //再fbx for (int i = 0; i < FBXData.Count; i++) { if (null != FBXData[i]) { dependenicesConfig.FBXResConfigDatas.Add(FBXData[i]); } } //再clip for (int i = 0; i < ClipData.Count; i++) { if (null != ClipData[i]) { dependenicesConfig.AnimatonClipResConfigDatas.Add(ClipData[i]); } } //再controller for (int i = 0; i < ControllerData.Count; i++) { if (null != ControllerData[i]) { dependenicesConfig.AnimatorControllerResConfigDatas.Add(ControllerData[i]); } } //再shader for (int i = 0; i < ShaderData.Count; i++) { if (null != ShaderData[i]) { dependenicesConfig.ShaderResConfigDatas.Add(ShaderData[i]); } } //再材质球 for (int i = 0; i < MaterialData.Count; i++) { if (null != MaterialData[i]) { dependenicesConfig.MaterialResConfigDatas.Add(MaterialData[i]); } } }
/// <summary> /// 加载预制体配置 /// </summary> private static void LoadPrefabSelfConfig(Dictionary <string, Dictionary <string, UnionResConfigData> > result = null, Dictionary <string, PrefabDependenicesResConfigData> depedenceResult = null) { string patch = AssetBundleManager.GetPrefabConfigPath(); if (!File.Exists(patch)) { if (Application.isPlaying) { Debug.LogError("找不到预制体配置!!!-" + patch); } return; } string stSchemeAllText = DeCodeAssetFile(patch); if (stSchemeAllText.Equals(string.Empty)) { return; } if (result == null || depedenceResult == null) { result = m_PrefabConfigTable; depedenceResult = m_PrefabDependenciesConfigTable; } ////去掉\n,因为ScpReader以"\r"分割 //stSchemeAllText = stSchemeAllText.Replace("\n", ""); ////再干掉最后的"\r" //stSchemeAllText = stSchemeAllText.Remove(stSchemeAllText.Length - 1, 1); AssetBundleConfigReader PrefabReader = new AssetBundleConfigReader(stSchemeAllText, "PrefabConfig", 0); bool isNeedLoadDependenices = false; //是否需要加载依赖配置 UnionResConfigData currLoadingPrefab = null; //当前正在加载的Prefab int texcount = 0; //贴图数目 int fbxcount = 0; //fbx数目 int clipcount = 0; //clip数目 int controllercount = 0; //animatorcontroller数目 int shadercount = 0; //shader数目 int materialcount = 0; //材质球数目 string lowerPrefabCommonPatch = PrefabCommonPatch.ToLower(); for (int i = 0; i < PrefabReader.GetRecordCount(); ++i) { isNeedLoadDependenices = !(texcount == 0 && fbxcount == 0 && clipcount == 0 && controllercount == 0 && shadercount == 0 && materialcount == 0); if (!isNeedLoadDependenices) { UnionResConfigData prefabConfig = new UnionResConfigData(); prefabConfig.AssetBundleName = PrefabReader.GetString(i, (int)PrefabConfigCol.COL_AssetBundleName, string.Empty); prefabConfig.AssetName = PrefabReader.GetString(i, (int)PrefabConfigCol.COL_AssetName, string.Empty); prefabConfig.AssetGUID = PrefabReader.GetString(i, (int)PrefabConfigCol.COL_AssetGUID, string.Empty); prefabConfig.unionIndx = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_UnionIndex, -1); prefabConfig.startIndex = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_StartIndex, -1); prefabConfig.dataLength = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_DataLength, -1); if (!prefabConfig.AssetBundleName.EndsWith(PrefabVariant)) { Debug.LogWarning("预制体配置中有冗余的配置:" + prefabConfig.AssetBundleName + ",名字:" + prefabConfig.AssetName + ",重新生成资源可解决此问题 -- not gameobject"); continue; } texcount = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_TextureCount, 0); fbxcount = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_FBXCount, 0); clipcount = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_ClipCount, 0); controllercount = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_ControllerCount, 0); shadercount = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_ShaderCount, 0); materialcount = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_MaterialCount, 0); isNeedLoadDependenices = !(texcount == 0 && fbxcount == 0 && clipcount == 0 && controllercount == 0 && shadercount == 0 && materialcount == 0); if (Application.isPlaying) { if (isOnRunTimeMode) { if (prefabConfig.unionIndx < 0 || prefabConfig.startIndex < 0 || prefabConfig.dataLength <= 0) { Debug.LogWarning("无效的预制体配置中有冗余的配置:" + prefabConfig.AssetBundleName + ",名字:" + prefabConfig.AssetName + ",重新生成资源可解决此问题--uniondex < 0"); i += texcount; i += fbxcount; i += clipcount; i += controllercount; i += shadercount; i += materialcount; texcount = 0; fbxcount = 0; clipcount = 0; controllercount = 0; shadercount = 0; materialcount = 0; isNeedLoadDependenices = false; currLoadingPrefab = null; continue; } } } currLoadingPrefab = prefabConfig; int InstanceID = GUIDToInstanceID(prefabConfig.AssetGUID); if (m_PrefabGUIDConfigTable.ContainsKey(InstanceID)) { Debug.LogWarning("重复的预制体配置,GUID:" + prefabConfig.AssetGUID + "资源名:" + prefabConfig.AssetName); i += texcount; i += fbxcount; i += clipcount; i += controllercount; i += shadercount; i += materialcount; texcount = 0; fbxcount = 0; clipcount = 0; controllercount = 0; shadercount = 0; materialcount = 0; isNeedLoadDependenices = false; currLoadingPrefab = null; continue; } else { m_PrefabGUIDConfigTable.Add(InstanceID, prefabConfig); } //把预制体资源先加载进去 Dictionary <string, UnionResConfigData> assetTable = null; if (result.TryGetValue(prefabConfig.AssetBundleName, out assetTable)) { if (assetTable.ContainsKey(prefabConfig.AssetName)) { Debug.LogWarning("预制体:" + prefabConfig.AssetBundleName + "有重复的依赖资源:" + prefabConfig.AssetName); continue; } assetTable.Add(prefabConfig.AssetName, prefabConfig); } else { assetTable = new Dictionary <string, UnionResConfigData>(); assetTable.Add(prefabConfig.AssetName, prefabConfig); result.Add(prefabConfig.AssetBundleName, assetTable); //通用预制体 if (prefabConfig.AssetBundleName.Contains(lowerPrefabCommonPatch)) { PrefabCommonAssetBundleNames.Add(prefabConfig.AssetBundleName); } } //直接destroy GameObject类型的资源 //没有依赖的,给一个空配置即可 if (!isNeedLoadDependenices) { depedenceResult.Add(currLoadingPrefab.AssetGUID, new PrefabDependenicesResConfigData()); } continue; } /*开始加载配置依赖表*/ //1.先创建类 PrefabDependenicesResConfigData dependenicesConfig = null; if (!depedenceResult.TryGetValue(currLoadingPrefab.AssetGUID, out dependenicesConfig)) { dependenicesConfig = new PrefabDependenicesResConfigData(); depedenceResult.Add(currLoadingPrefab.AssetGUID, dependenicesConfig); } //先是贴图 if (texcount > 0) { texcount--; string guid = StringHelper.CopyString(PrefabReader.GetString(i, 0, string.Empty)); PushPrefabUnionRes(guid, dependenicesConfig.TextureResConfigDatas); continue; } //再加载FBX if (fbxcount > 0) { fbxcount--; string guid = StringHelper.CopyString(PrefabReader.GetString(i, 0, string.Empty)); PushPrefabUnionRes(guid, dependenicesConfig.FBXResConfigDatas); continue; } //再加载clip if (clipcount > 0) { clipcount--; string guid = StringHelper.CopyString(PrefabReader.GetString(i, 0, string.Empty)); PushPrefabUnionRes(guid, dependenicesConfig.AnimatonClipResConfigDatas); continue; } //再加载controller if (controllercount > 0) { controllercount--; string guid = StringHelper.CopyString(PrefabReader.GetString(i, 0, string.Empty)); PushPrefabUnionRes(guid, dependenicesConfig.AnimatorControllerResConfigDatas); continue; } //再加载shader if (shadercount > 0) { shadercount--; string guid = StringHelper.CopyString(PrefabReader.GetString(i, 0, string.Empty)); PushPrefabUnionRes(guid, dependenicesConfig.ShaderResConfigDatas); continue; } //再加载material if (materialcount > 0) { materialcount--; string guid = StringHelper.CopyString(PrefabReader.GetString(i, 0, string.Empty)); PushPrefabUnionRes(guid, dependenicesConfig.MaterialResConfigDatas); continue; } } PrefabReader.Dispose(); PrefabReader = null; }
private static void CorrectDependencies() { if (m_PrefabDependenciesConfigTable.Count <= 0) { return; } List <int> tempTextureList = new List <int>(50); List <int> tempMatList = new List <int>(50); List <int> tempAniList = new List <int>(50); List <int> tempFBXList = new List <int>(50); List <int> tempAniControllerList = new List <int>(50); List <int> tempDepList = new List <int>(100); foreach (PrefabDependenicesResConfigData keyValue in m_PrefabDependenciesConfigTable.Values) { tempTextureList.Clear(); tempMatList.Clear(); tempAniList.Clear(); tempFBXList.Clear(); tempAniControllerList.Clear(); tempDepList.Clear(); PrefabDependenicesResConfigData dependenciesConfig = keyValue; foreach (string resGUID in dependenciesConfig.TextureResConfigDatas) { int guid = GUIDToInstanceID(resGUID); tempTextureList.Add(guid); } tempDepList.Clear(); foreach (string resGUID in dependenciesConfig.MaterialResConfigDatas) { tempDepList.AddRange(tempTextureList); int guid = GUIDToInstanceID(resGUID); tempMatList.Add(guid); PushDependence(guid, tempDepList); } tempDepList.Clear(); foreach (string resGUID in dependenciesConfig.AnimatonClipResConfigDatas) { tempDepList.AddRange(tempMatList); int guid = GUIDToInstanceID(resGUID); tempAniList.Add(guid); PushDependence(guid, tempDepList); } tempDepList.Clear(); foreach (string resGUID in dependenciesConfig.FBXResConfigDatas) { tempDepList.AddRange(tempMatList); tempDepList.AddRange(tempAniList); int guid = GUIDToInstanceID(resGUID); ResConfigData res = GetDependenicesConfig(resGUID); tempFBXList.Add(guid); PushDependence(guid, tempDepList); } tempDepList.Clear(); foreach (string resGUID in dependenciesConfig.AnimatorControllerResConfigDatas) { tempDepList.AddRange(tempMatList); tempDepList.AddRange(tempAniList); tempDepList.AddRange(tempFBXList); int guid = GUIDToInstanceID(resGUID); tempAniControllerList.Add(guid); PushDependence(guid, tempDepList); } } }