IEnumerable DoCheckMeshRendererCoroutine(string prefabName, GameObject scenePrefab) { List <GameObject> rendererList = new List <GameObject>(); CUnityUtil.FindChildLeaf(typeof(MeshRenderer), scenePrefab, rendererList); CBlockMeshInfo meshInfo = new CBlockMeshInfo(); //检查每个包含MeshRenderer的go foreach (var go in rendererList) { //MeshRenderer renderer = go.GetComponent<MeshRenderer>(); MeshFilter[] meshes = go.GetComponentsInChildren <MeshFilter>(); int nFaces = 0; foreach (var ms in meshes) { Mesh mesh = ms.sharedMesh != null ? ms.sharedMesh : ms.mesh; nFaces += mesh.triangles.Length / 3; } var entry = new CMeshEntry() { name = go.name, parent = prefabName, faces = nFaces, }; meshInfo.meshList.Add(entry); _ListEntries.Add(entry); } meshInfo.Sort(); _DicPrefabMeshInfo.Add(prefabName, meshInfo); yield return(null); }
IEnumerable DoCheckMeshRendererCoroutine(string prefabName, SceneConfig config) { Transform blockRootTran = config.transform.Find("BlockObjects"); if (null == blockRootTran) { blockRootTran = config.transform; } int count = 0; int total = config._BlockPositionList.Count; foreach (SceneConfig.CPositionSetting currentPos in config._BlockPositionList) { ++count; string shortName = System.IO.Path.GetFileNameWithoutExtension(prefabName); string blockName = System.IO.Path.GetFileName(currentPos._BlockName); GameDataCheckMan.Instance.SetDesc(string.Format("{0} 检查Obj: {1}", shortName, blockName)); GameDataCheckMan.Instance.SetPartProgress((float)count / total); yield return(null); var asset = AssetBundleCheck.Instance.LoadAsset(currentPos._BlockName); if (asset == null) { _ErrorString += string.Format("terrain加载Object错误: {0}\n", currentPos._BlockName); continue; } //创建 //TextLogger.Instance.WriteLine(string.Format("Checking Scene Object: {0}", currentPos._BlockName)); var obj = GameObject.Instantiate(asset) as GameObject; obj.transform.parent = blockRootTran; List <GameObject> rendererList = new List <GameObject>(); CUnityUtil.FindChildLeaf(typeof(MeshRenderer), obj, rendererList); CBlockMeshInfo meshInfo = new CBlockMeshInfo(); //检查每个包含MeshRenderer的go foreach (var go in rendererList) { //MeshRenderer renderer = go.GetComponent<MeshRenderer>(); MeshFilter[] meshes = go.GetComponentsInChildren <MeshFilter>(); int nFaces = 0; foreach (var ms in meshes) { Mesh mesh = ms.sharedMesh != null ? ms.sharedMesh : ms.mesh; nFaces += mesh.triangles.Length / 3; } var entry = new CMeshEntry() { name = go.name, parent = currentPos._BlockName, faces = nFaces, }; meshInfo.meshList.Add(entry); _ListEntries.Add(entry); } meshInfo.Sort(); _DicBlockMeshInfo.Add(currentPos._BlockName, meshInfo); GameObject.DestroyImmediate(obj); } yield return(null); }