protected override IEnumerator DoExport() { if (m_IsCleanAll) { //TODO:导出前先清除所有的unit MapEditorSetting mapEditorSetting = MapEditorUtility.GetMapEditorSetting(); string exportAssetPath = string.Format("{0}/{1}" , mapEditorSetting.AssetExportDirectory , Constants.UNIT_PREFAB_EXPORT_DIRECTORY); exportAssetPath = MapEditorUtility.GetFullPath(exportAssetPath); string[] unitFiles = Directory.GetFiles(exportAssetPath, "*.prefab", SearchOption.AllDirectories); if (unitFiles != null && unitFiles.Length > 0) { UTF8Encoding utf8 = new UTF8Encoding(false); for (int iFile = 0; iFile < unitFiles.Length; iFile++) { EditorUtility.DisplayProgressBar("删除所有unit", unitFiles[iFile], iFile * 1.0f / unitFiles.Length); File.Delete(unitFiles[iFile]); yield return(null); } } EditorUtility.ClearProgressBar(); AssetDatabase.Refresh(); } yield return(null); if (m_MapPaths != null && m_MapPaths.Count > 0) { for (int iMap = 0; iMap < m_MapPaths.Count; iMap++) { string mapPath = m_MapPaths[iMap]; Scene iterScene = EditorSceneManager.OpenScene(mapPath, OpenSceneMode.Single); GameObject[] rootGameObjects = iterScene.GetRootGameObjects(); for (int iRootGameObject = 0; iRootGameObject < rootGameObjects.Length; iRootGameObject++) { GameObject iterGameObject = rootGameObjects[iRootGameObject]; Map iterMap = iterGameObject.GetComponent <Map>(); if (iterMap) { ExporterHandle handle = iterMap.ExportMap(); while (!handle.IsDone) { yield return(null); } } } } } yield return(null); ///导出所有结束后 把公用unit放到单独目录下 IEnumerator findCommonUnitsEnumerator = new Exporter().FindCommonUnits(); while (findCommonUnitsEnumerator.MoveNext()) { yield return(null); } }
private void OnEndExport() { GameObject.DestroyImmediate(gameObject); GamingMapEditorSetting gamingSetting = GamingMapEditorUtility.GetGamingMapEditorSetting(); MapEditorUtility.OpenFolder(MapEditorUtility.GetFullPath(gamingSetting.m_ConfigPath)); }
private void OnGUI() { GUILayout.BeginHorizontal("box"); EditorGUILayout.LabelField("关联地图Scene:", m_RelationScene); if (m_HasSelect) { if (GUILayout.Button("收起", GUILayout.Width(100))) { m_HasSelect = false; } GUILayout.EndHorizontal(); m_VerticalPos = GUILayout.BeginScrollView(m_VerticalPos); GUILayout.BeginVertical("box"); if (m_RelationSceneList != null && m_RelationSceneList.Count > 0) { for (int iRelation = 0; iRelation < m_RelationSceneList.Count; iRelation++) { string[] splitPath = m_RelationSceneList[iRelation].Split('/'); if (splitPath != null && splitPath.Length > 0) { string showPath = splitPath[splitPath.Length - 1]; if (!string.IsNullOrEmpty(showPath)) { showPath = showPath.Replace(".unity", ""); if (GUILayout.Button(showPath)) { m_RelationScene = m_RelationSceneList[iRelation]; m_HasSelect = false; } } } } } else { GUILayout.Label("未找到关联的Scene"); } GUILayout.EndVertical(); GUILayout.EndScrollView(); } else { if (GUILayout.Button("选择", GUILayout.Width(100))) { m_HasSelect = true; } GUILayout.EndHorizontal(); } GUILayout.BeginVertical("box"); m_GamingMapId = EditorGUILayout.TextField("GamingMap Id:", m_GamingMapId); m_GamingMapName = EditorGUILayout.TextField("名称:", m_GamingMapName); //m_GamingMapType = (GamingMapType)EditorGUILayout.EnumPopup("类型:", m_GamingMapType); m_SelectTypeIndex = EditorGUILayout.Popup(new GUIContent("类型:"), m_SelectTypeIndex, EditorGamingMapData.GAMINGMAPTYPE_NAME); m_GamingMapType = (GamingMapType)m_SelectTypeIndex; if (GUILayout.Button("创建")) { if (m_RelationScene == null) { EditorUtility.DisplayDialog("提示", "请选择关联地图Scene", "确定"); return; } uint mapId; if (!uint.TryParse(m_GamingMapId, out mapId)) { EditorUtility.DisplayDialog("提示", "GamingMap id格式错误", "确定"); return; } if (string.IsNullOrEmpty(m_GamingMapName)) { EditorUtility.DisplayDialog("提示", "名称不能为空", "确定"); return; } string mapPath = ""; GamingMapEditorSetting gamingSetting = GamingMapEditorUtility.GetGamingMapEditorSetting(); if (gamingSetting != null) { mapPath = string.Format("{0}/GamingMap_{1}.unity", MapEditorUtility.GetFullPath(gamingSetting.m_GamingMapPath), mapId); } if (File.Exists(mapPath)) { EditorUtility.DisplayDialog("提示", "该GamingMap已存在", "确定"); return; } List <Scene> openScenes = new List <Scene>(); for (int iScene = 0; iScene < EditorSceneManager.sceneCount; iScene++) { Scene sceneTmp = EditorSceneManager.GetSceneAt(iScene); openScenes.Add(sceneTmp); } SaveOpenScene(); //打开对应的map 找到mapid 创建Gamingmap 初始化GamingMap和Area Scene scene = EditorSceneManager.OpenScene(m_RelationScene, OpenSceneMode.Additive); Map map = null; GameObject[] objs = scene.GetRootGameObjects(); if (objs != null && objs.Length > 0) { for (int iObj = 0; iObj < objs.Length; iObj++) { map = objs[iObj].GetComponent <Map>(); if (map != null) { break; } } } //string gamingPath = PlayerPrefsUtility.GetString(Constants.GAMINGMAP_TEMPLETE_PATH); string gamingPath = ""; if (gamingSetting != null) { gamingPath = MapEditorUtility.GetFullPath(gamingSetting.m_GamingMapTemplete); gamingPath += "/"; } FileUtil.CopyFileOrDirectory(gamingPath, mapPath); AssetDatabase.ImportAsset(mapPath); Scene exportScene = EditorSceneManager.OpenScene(mapPath, OpenSceneMode.Additive); GameObject[] exportObjs = exportScene.GetRootGameObjects(); if (exportObjs != null && exportObjs.Length > 0) { for (int iExport = 0; iExport < exportObjs.Length; iExport++) { GamingMap gamingMap = exportObjs[iExport].GetComponent <GamingMap>(); if (gamingMap != null) { gamingMap.Init(mapId, map.Uid, m_GamingMapName, m_GamingMapType, map.GetAreaSpawnerList()); break; } } } SceneManager.SetActiveScene(exportScene); EditorSceneManager.SaveScene(exportScene); EditorSceneManager.CloseScene(scene, true); if (openScenes != null && openScenes.Count > 0) { for (int iOpen = 0; iOpen < openScenes.Count; iOpen++) { Scene openScene = openScenes[iOpen]; EditorSceneManager.SaveScene(openScene); EditorSceneManager.CloseScene(openScene, true); } } } GUILayout.EndVertical(); }