using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 地图坐标转换工具 /// public static class MapHelper { static bool hasInit; static Vector2 terrainSize; static Vector2 mapSize; /// /// 地形/地图的 /// public static float mapScale; //static Vector2 public static void InitHelper(Vector2 terrainSize,Vector2 mapSize) { hasInit = true; MapHelper.terrainSize = terrainSize; MapHelper.mapSize = mapSize; mapScale = terrainSize.x / mapSize.x; } public static Vector3 GetWorldPosFromAnchPos(Vector2 anchoredPos) { if (!hasInit) { Debug.LogError("未初始化地图数据无法转换"); return Vector3.zero; } Vector3 worldPos = new Vector3(anchoredPos.x + mapSize.x / 2, 0, anchoredPos.y + mapSize.x / 2) * mapScale; worldPos.y = Terrain.activeTerrain.SampleHeight(worldPos);//获取与地形对应点的世界坐标高度3 return worldPos; } // /// 根据世界坐标获取地图锚点坐标 地形必须是正方形 长方形需修改该方法 /// /// /// 返回以地图中心为锚点的锚点位置 public static Vector2 GetAnchorPostionFromWorld(Vector3 worldPos) { if (!hasInit) { Debug.LogError("未初始化地图数据无法转换"); return Vector2.zero; } return new Vector2(worldPos.x - terrainSize.x / 2, worldPos.z - terrainSize.y / 2) / mapScale; } /// /// 计算物体尺寸在地图上的像素点 /// /// 单位M /// 像素点 public static float GetPixelFromSize(float size) { if (!hasInit) { Debug.LogError("未初始化地图数据无法转换"); return 0; } return size/ mapScale; } public static void Clear() { hasInit = false; } }