private void ShowTileMapInfo() { EditorGUIUtility.labelWidth = 120; TileMapData item = tilemapData[tileMaptoolbarOption]; if (GUILayout.Button("-", GUILayout.Width(30))) { if (EditorUtility.DisplayDialog("提示", "确定要删除 " + item.TilemapName + " 吗?", "确定", "取消")) { tilemapData.Remove(item); tileMaptoolbarOption = 0; } } GUILayout.BeginHorizontal(); GUILayout.BeginVertical(); string[] StrlayersPopupSize = new string[SortingLayer.layers.Length]; int[] intlayersPopupSize = new int[SortingLayer.layers.Length]; for (int i = 0; i < intlayersPopupSize.Length; i++) { intlayersPopupSize[i] = i; StrlayersPopupSize[i] = SortingLayer.layers[i].name; } string[] SortOrderPopupSize = { TilemapRenderer.SortOrder.BottomLeft.ToString(), TilemapRenderer.SortOrder.BottomRight.ToString(), TilemapRenderer.SortOrder.TopLeft.ToString(), TilemapRenderer.SortOrder.TopRight.ToString() }; int[] intSortOrderPopupSize = { (int)TilemapRenderer.SortOrder.BottomLeft, (int)TilemapRenderer.SortOrder.BottomRight, (int)TilemapRenderer.SortOrder.TopLeft, (int)TilemapRenderer.SortOrder.TopRight }; item.TilemapName = EditorGUILayout.TextField("TileMap Name : ", item.TilemapName, GUILayout.Width(250)); item.SortOrderIndex = EditorGUILayout.IntPopup("Sort Order:", item.SortOrderIndex, SortOrderPopupSize, intSortOrderPopupSize, GUILayout.ExpandWidth(true), GUILayout.Width(250)); item.SortingLayerIndex = EditorGUILayout.IntPopup("Sorting Layer:", item.SortingLayerIndex, StrlayersPopupSize, intlayersPopupSize, GUILayout.ExpandWidth(true), GUILayout.Width(250)); item.OrderInLayer = EditorGUILayout.IntField("Order in Layer : ", item.OrderInLayer, GUILayout.Width(250)); GUILayout.EndVertical(); GUILayout.BeginVertical(); if (GUILayout.Button("预 览", GUILayout.Width(100))) { CreateCurTileMap(); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); if (item.tileInfoList == null) { GUILayout.Label("Tile Count : 0"); } else { GUILayout.Label("Tile Count : " + item.tileInfoList.Count); } scrollPos = EditorGUILayout.BeginScrollView(scrollPos); if (item.tileInfoList != null) { for (int i = 0; i < item.tileInfoList.Count; i++) { XMTile tile = (XMTile)item.tileInfoList[i].tile; GUILayout.Label("【" + (i + 1).ToString("0000") + "】 walkable:" + tile.walkable + " destroable:" + tile.destroable + " Pos:" + item.tileInfoList[i].pos + " Tile:" + tile); } } EditorGUILayout.EndScrollView(); }
/// <summary> /// 设置TileMap /// </summary> /// <param name="map"></param> /// <param name="tileMapDataList"></param> public static void SetTileMap(Tilemap map, TileMapData tileMapData) { if (tileMapData.tileInfoList != null) { foreach (var tile in tileMapData.tileInfoList) { map.SetTile(tile.ipos, tile.tile); } } }
public static void SaveData(List <TileMapDataList> target, List <TileMapDataList> source) { target.Clear(); foreach (var item in source) { TileMapDataList list = new TileMapDataList(); list.tileMapDataList = new List <TileMapData>(); foreach (var item1 in item.tileMapDataList) { TileMapData mapdata = new TileMapData(); mapdata.OrderInLayer = item1.OrderInLayer; mapdata.SortingLayerIndex = item1.SortingLayerIndex; mapdata.SortOrderIndex = item1.SortOrderIndex; mapdata.TilemapName = item1.TilemapName; mapdata.tileInfoList = new List <TileInfo>(); if (item1.tileInfoList == null || item1.tileInfoList.Count == 0) { Debug.LogError(item1.TilemapName + " tileInfoList is null or count is zero"); } else { foreach (var item2 in item1.tileInfoList) { TileInfo tile = new TileInfo(); tile.ipos = item2.ipos; tile.pos = item2.pos; tile.tile = item2.tile; mapdata.tileInfoList.Add(tile); } } list.tileMapDataList.Add(mapdata); } target.Add(list); } if (target == SourceData.Data) { UnityEditor.EditorUtility.SetDirty(TargetData); UnityEditor.EditorUtility.SetDirty(SourceData); } else if (target == TargetData.Data) { UnityEditor.EditorUtility.SetDirty(TargetData); } File.Copy(Application.dataPath + "/XMtileMap/Data/SourceData.asset", Application.dataPath + "/RefResources/ScriptableObjects/MapData.asset", true); UnityEditor.AssetDatabase.SaveAssets(); UnityEditor.AssetDatabase.Refresh(); }
private void TileMapContent() { if (XMMapData.TargetData == null || XMMapData.SourceData == null || XMMapData.TargetData.Data == null || XMMapData.TargetData.Data.Count == 0) { return; } tilemapData = XMMapData.TargetData.Data[IntPopupIndex].tileMapDataList; GUILayout.BeginHorizontal(); if (GUILayout.Button("+", GUILayout.Width(30))) { if (tilemapData.Count < 5) { TileMapData data = new TileMapData(); data.TilemapName = data.TilemapName + (tilemapData.Count + 1).ToString(); data.OrderInLayer = 0; data.SortingLayerIndex = 0; data.SortOrderIndex = 0; tilemapData.Add(data); tileMaptoolbarOption = tilemapData.Count - 1; } else { EditorUtility.DisplayDialog("提示", "最多只能创建 5 个Tilemap", "确定", "取消"); } } if (XMMapData.TargetData.Data.Count == 0) { return; } if (tilemapData == null) { GUILayout.Label("TileMaps Count: 0"); return; } else { GUILayout.Label("TileMaps Count: " + tilemapData.Count); } GUILayout.EndHorizontal(); if (tilemapData == null || tilemapData.Count == 0 || tilemapData.Count < tileMaptoolbarOption + 1) //这里的作用是,切换地图的时候可能会因为Tilemap数量不一样导致报错 { tileMaptoolbarOption = 0; return; } int count = tilemapData.Count; tileMaptoolbarTexts = new string[count]; for (int i = 0; i < count; i++) { tileMaptoolbarTexts[i] = tilemapData[i].TilemapName; } tileMaptoolbarOption = GUILayout.Toolbar(tileMaptoolbarOption, tileMaptoolbarTexts, GUILayout.Height(20)); switch (tileMaptoolbarOption) { case 0: ShowTileMapInfo(); break; case 1: ShowTileMapInfo(); break; case 2: ShowTileMapInfo(); break; case 3: ShowTileMapInfo(); break; case 4: ShowTileMapInfo(); break; } }