/// <summary> /// 添加地图数据 /// </summary> /// <param name="grid"></param> /// <param name="position"></param> private void AddTileMapData(GridLayout gridLayout, GameObject brushTarget, Vector3Int position) { TileInfo data = new TileInfo { //tile的中心点为四个顶点的其中一个点,默认左下角,我们偏移一下保证和其他游戏对象的中心点一致,这里是还原创建Grid时的偏移,保证对象刚好在tile的中心点 pos = gridLayout.CellToWorld(position) + XMMapData.tileOffset3, ipos = position }; for (int i = 0; i < cells.Length; i++) { XMTile xmtile = (XMTile)cells[i].tile; data.tile = xmtile; } XMMapData.AddData(brushTarget, data.pos, data); }
private void MainGUI() { if (XMMapData.TargetData == null) { GUILayout.Label("副本为空,请设置副本数据"); return; } if (XMMapData.SourceData == null) { GUILayout.Label("源数据为空,请设置源数据"); return; } EditorGUILayout.BeginHorizontal(); GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); strPopupSize = new string[XMMapData.TargetData.Data.Count]; intPopupSize = new int[XMMapData.TargetData.Data.Count]; for (int i = 0; i < intPopupSize.Length; i++) { intPopupSize[i] = i; strPopupSize[i] = (i).ToString(); } EditorGUIUtility.labelWidth = 60; IntPopupIndex = EditorGUILayout.IntPopup("Map ID:", IntPopupIndex, strPopupSize, intPopupSize, GUILayout.ExpandWidth(true), GUILayout.Width(150)); XMMapData.MapID = IntPopupIndex; if (GUILayout.Button("-", GUILayout.Width(35))) { if (EditorUtility.DisplayDialog("提示", "确定要删除地图 【 " + IntPopupIndex + " 】 吗?", "确定", "取消")) { XMMapData.TargetData.Data.RemoveAt(IntPopupIndex); IntPopupIndex -= 1; if (IntPopupIndex <= 0) { IntPopupIndex = 0; } } } if (GUILayout.Button("+", GUILayout.Width(35))) { TileMapDataList list = new TileMapDataList(); XMMapData.TargetData.Data.Add(list); IntPopupIndex = XMMapData.TargetData.Data.Count - 1; tileMaptoolbarOption = 0; Transform grid = GameObject.Find("Grid").transform; tileMaptoolbarTexts = new string[grid.childCount]; for (int i = 0; i < grid.childCount; i++) { tileMaptoolbarTexts[i] = grid.GetChild(i).name; } } GUILayout.EndHorizontal(); GUILayout.Label(XMConst.CopyRight); GUILayout.EndVertical(); if (GUILayout.Button("打开编辑场景", GUILayout.Height(35))) { EditorSceneManager.OpenScene("Assets/XMtileMap/Scenes/XMtileMap.unity"); } if (GUILayout.Button("预 览", GUILayout.Height(35))) { if (CheckNameConflict()) { EditorUtility.DisplayDialog("提示", " Tilemap 名字冲突", "确定"); return; } if (EditorSceneManager.GetActiveScene().name != "XMtileMap") { EditorUtility.DisplayDialog("提示", "请打开 XMtileMap 场景进行编辑", "确定"); return; } if (EditorApplication.isPlaying) { EditorUtility.DisplayDialog("提示", "场景正在播放中,不能进行预览", "确定"); return; } CreateTileMap(); } if (GUILayout.Button("重置副本", GUILayout.Height(35))) { if (EditorUtility.DisplayDialog("提示", "确定要重置副本吗", "确定", "取消")) { IntPopupIndex = 0; XMMapData.SaveData(XMMapData.TargetData.Data, XMMapData.SourceData.Data); } } if (GUILayout.Button("保存副本", GUILayout.Height(35))) { if (CheckNameConflict()) { EditorUtility.DisplayDialog("提示", " Tilemap 名字冲突", "确定"); return; } if (EditorUtility.DisplayDialog("提示", "确定要保存副本吗", "确定", "取消")) { EditorUtility.SetDirty(XMMapData.TargetData); } } //GUI.backgroundColor = Color.green; if (GUILayout.Button("保存数据", GUILayout.Height(35))) { if (CheckNameConflict()) { EditorUtility.DisplayDialog("提示", " Tilemap 名字冲突", "确定"); return; } if (EditorUtility.DisplayDialog("提示", "确定要保存数据吗", "确定", "取消")) { XMMapData.SaveData(XMMapData.SourceData.Data, XMMapData.TargetData.Data); } } //if (GUILayout.Button("保存JSON", GUILayout.Height(35))) //{ // if (CheckNameConflict()) // { // EditorUtility.DisplayDialog("提示", " Tilemap 名字冲突", "确定"); // return; // } // if (EditorUtility.DisplayDialog("提示", "确定要保存数据吗", "确定", "取消")) // { // XMMapData.SaveData(XMMapData.SourceData.Data, XMMapData.TargetData.Data); // XMMapData.SaveToJSON("Assets/XMtileMap/Data/SourceData.json", XMMapData.SourceData); // XMMapData.SaveToJSON("Assets/XMtileMap/Data/TargetData.json", XMMapData.TargetData); // } //} EditorGUILayout.EndHorizontal(); }
/// <summary> /// 清除地图数据 /// </summary> /// <param name="position"></param> private void ClearTileMapData(GridLayout gridLayout, GameObject brushTarget, Vector3Int position) { Vector3 pos = gridLayout.CellToWorld(position) + XMMapData.tileOffset3; XMMapData.ClearData(brushTarget, pos); }