private IEnumerator SpawnerCollider()
    {
        EditorColliderArea[] arealist = m_ColliderData.areaList;
        if (arealist != null && arealist.Length > 0)
        {
            for (int iArea = 0; iArea < arealist.Length; iArea++)
            {
                EditorColliderArea editorArea = arealist[iArea];
                if (editorArea == null)
                {
                    continue;
                }
                GameObject areaObj = new GameObject(editorArea.areaId.ToString());
                areaObj.transform.SetParent(transform);
                areaObj.transform.localPosition = Vector3.zero;
                areaObj.transform.localRotation = Quaternion.identity;
                areaObj.transform.localScale    = Vector3.one;

                EditorDecorate[] decorate_list = editorArea.decorateList;
                if (decorate_list != null && decorate_list.Length > 0)
                {
                    for (int iDecorate = 0; iDecorate < decorate_list.Length; iDecorate++)
                    {
                        EditorDecorate decorate = decorate_list[iDecorate];
                        CreateColliderObj(decorate, areaObj.transform);
                        yield return(null);
                    }
                }
            }
            yield return(null);

            GameObject commonObj = new GameObject("DontExport");
            commonObj.transform.SetParent(transform);
            commonObj.transform.localPosition = Vector3.zero;
            commonObj.transform.localRotation = Quaternion.identity;
            commonObj.transform.localScale    = Vector3.one;

            EditorDecorate[] commonDecorate_list = m_ColliderData.commondecorateList;
            if (commonDecorate_list != null && commonDecorate_list.Length > 0)
            {
                for (int iDecorate = 0; iDecorate < commonDecorate_list.Length; iDecorate++)
                {
                    EditorDecorate decorate = commonDecorate_list[iDecorate];
                    CreateColliderObj(decorate, commonObj.transform);
                    yield return(null);
                }
            }
        }
        yield return(null);
    }
        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();
                }
            }
        }