public IEnumerator GenerateAreaDecorate(EditorCollider outData, List <EditorDecorate> editorDecorateList) { if (m_Map.m_AreaSpawnerCache != null && m_Map.m_AreaSpawnerCache.Count > 0) { EditorColliderArea[] areaList = new EditorColliderArea[m_Map.m_AreaSpawnerCache.Count]; outData.areaList = areaList; List <GameObject> prefabList = new List <GameObject>(); for (int iArea = 0; iArea < m_Map.m_AreaSpawnerCache.Count; iArea++) { editorDecorateList.Clear(); EditorColliderArea editorArea = new EditorColliderArea(); areaList[iArea] = editorArea; AreaSpawner areaSpawner = m_Map.m_AreaSpawnerCache[iArea]; Area area = areaSpawner.GetArea(); string areaName = areaSpawner.GetAreaScenePath(); while (!string.IsNullOrEmpty(areaName) && area == null) { area = areaSpawner.GetArea(); yield return(null); } editorArea.areaId = areaSpawner.GetAreaId(); if (area != null) { EditorGamingMapData.CorrectAreaColliderCenter(area); yield return(null); yield return(null); prefabList.Clear(); MapEditorUtility.GetAllPrefab(area.transform, prefabList); if (prefabList != null && prefabList.Count > 0) { for (int iUnit = 0; iUnit < prefabList.Count; iUnit++) { GameObject unit = prefabList[iUnit]; List <Transform> colliderRoots = MapEditorUtility.FindChilds <Transform>(unit.transform, "Collider"); if (colliderRoots == null || colliderRoots.Count <= 0) { continue; } for (int iRoot = 0; iRoot < colliderRoots.Count; iRoot++) { Transform colliderRoot = colliderRoots[iRoot]; if (colliderRoot != null) { Collider[] colliders = colliderRoot.GetComponentsInChildren <Collider>(); if (colliders != null && colliders.Length > 0) { for (int iCollider = 0; iCollider < colliders.Length; iCollider++) { EditorUtility.DisplayProgressBar("GenerateAreaDecorate", string.Format("{0} {1}", area.name, colliders[iCollider].gameObject.name), (iArea + 1) * 1.0f / m_Map.m_AreaSpawnerCache.Count); Quaternion rot = colliders[iCollider].transform.rotation; colliders[iCollider].transform.rotation = Quaternion.identity; yield return(null); EditorDecorate decorate = EditorGamingMapData.SaveColliderData(colliders[iCollider], rot, true); yield return(null); colliders[iCollider].transform.rotation = rot; if (decorate != null) { decorate.id = m_AutoId++; editorDecorateList.Add(decorate); } CheckColliderLayer(colliders[iCollider]); } } } } } } editorArea.decorateList = editorDecorateList.ToArray(); } else { Debug.LogError(string.Format("Area {0} 未加载进来", areaSpawner.GetAreaId())); } yield return(null); EditorUtility.ClearProgressBar(); } } }