using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.Tilemaps; namespace Ether { [ExecuteInEditMode] public class GridMap : MonoBehaviour { public MapData_SO mapData; public GridType gridType; private Tilemap tileMap; private void OnEnable() { if (!Application.IsPlaying(this)) { tileMap = GetComponent(); if (mapData != null) mapData.tileProperties.Clear(); } } private void OnDisable() { if (!Application.IsPlaying(this)) { tileMap = GetComponent(); UpdateTileProperties(); #if UNITY_EDITOR if (mapData != null) EditorUtility.SetDirty(mapData); #endif } } private void UpdateTileProperties() { tileMap.CompressBounds(); if (!Application.IsPlaying(this)) { if (mapData != null) { //已绘制范围的左下角坐标 Vector3Int startPos = tileMap.cellBounds.min; //已绘制范围的右上角坐标 Vector3Int endPos = tileMap.cellBounds.max; for (int x = startPos.x; x < endPos.x; x++) { for (int y = startPos.y; y < endPos.y; y++) { TileBase tile = tileMap.GetTile(new Vector3Int(x, y, 0)); if (tile != null) { TileProperty newTile = new TileProperty { tileCoordinate = new Vector2Int(x, y), gridType = this.gridType, boolTypeValue = true }; mapData.tileProperties.Add(newTile); } } } } } } } }