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(); } } }