/// <summary> /// Убратьь компонент EditorCollider из указанных объектов /// </summary> void RemoveColliders() { EditorColliderCreator creator = (EditorColliderCreator)target; EditorCollider col = null; foreach (GameObject editorObj in creator.editorObjects) { if ((col = editorObj.GetComponent <EditorCollider>()) != null) { DestroyImmediate(col); } } }
public void Generate() { int childCount = transform.childCount; for (int iChild = childCount - 1; iChild >= 0; iChild--) { GameObject.DestroyImmediate(transform.GetChild(iChild).gameObject); } m_ColliderData = EditorGamingMapData.LoadMapCollider(m_MapId); if (m_ColliderData == null) { Debug.LogError("地图碰撞配置错误"); return; } m_Spawner = SpawnerCollider(); }
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(); } } }
protected override IEnumerator DoExport() { List <AreaSpawner> areaSpawners = m_Map.GetAreaSpawnerList(); if (areaSpawners != null && areaSpawners.Count > 0) { for (int iArea = 0; iArea < areaSpawners.Count; iArea++) { AreaSpawner areaSpawner = areaSpawners[iArea]; IEnumerator areaUpdateEnum = areaSpawner.DoUpdate(m_Map, false); while (areaUpdateEnum.MoveNext()) { yield return(null); } } } IEnumerator loadAreaEnumerator = m_Map.LoadAllArea(); while (loadAreaEnumerator.MoveNext()) { yield return(null); } EditorCollider outData = new EditorCollider(); List <EditorDecorate> editorDecorateList = new List <EditorDecorate>(); m_AutoId = 1; IEnumerator residentColliderEnumerator = GenerateAreaDecorate(outData, editorDecorateList); while (residentColliderEnumerator.MoveNext()) { yield return(null); } //常驻collider导出 editorDecorateList.Clear(); IEnumerator areaColliderEnumerator = GenerateResidentDecorate(editorDecorateList); while (areaColliderEnumerator.MoveNext()) { yield return(null); } outData.mapID = m_Map.Uid; outData.commondecorateList = editorDecorateList.ToArray(); EditorGamingMapData.SaveColliderToJson(outData); yield return(null); Area[] areaArray = UnityEngine.Object.FindObjectsOfType <Area>(); if (areaArray != null && areaArray.Length > 0) { for (int iArea = areaArray.Length - 1; iArea >= 0; iArea--) { GameObject.DestroyImmediate(areaArray[iArea].gameObject); if (iArea % 10 == 0) { yield return(null); } } } }