You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Unity Tilemap中点朝上六边形Tile角点的世界坐标?

Unity点朝上六边形Tile角点世界坐标获取方案

点朝上六边形Tile示例图

1. CellToWorld返回值是否为Tile中心点

默认配置下是。Unity Tilemap的CellToWorld方法返回的是单元格锚点对应的世界坐标,六边形Tile的默认单元格锚点为(0.5, 0.5, 0),刚好对应六边形的几何中心位置。
如果手动修改过Tilemap的锚点配置,需要以实际设置的锚点为准调整后续计算逻辑。

2. 六个角点世界坐标计算方法

点朝上的六边形几何特征固定,只要拿到中心坐标和外接圆半径即可算出所有角点,具体步骤如下:

  • 第一步:获取基础参数
    • 调用CellToWorld得到目标Tile的中心世界坐标
    • 获取Tilemap的单元格高度,中心到顶点的外接圆半径R等于单元格高度的1/2
  • 第二步:按角度计算六个顶点相对中心的偏移量,按顺时针排序依次为:
    • 顶部顶点:(0, R)
    • 右上顶点:(R * √3/2, R * 1/2)
    • 右下顶点:(R * √3/2, -R * 1/2)
    • 底部顶点:(0, -R)
    • 左下顶点:(-R * √3/2, -R * 1/2)
    • 左上顶点:(-R * √3/2, R * 1/2)

完整示例代码

// 目标六边形单元格坐标
Vector3Int targetCellPos = new Vector3Int(4, 8);
// 获取单元格中心世界坐标
Vector3 tileCenterWorldPos = MyTileMap.CellToWorld(targetCellPos);
// 计算外接圆半径R
float R = MyTileMap.cellSize.y / 2f;
// 预计算常用偏移参数
float halfSqrt3R = R * Mathf.Sqrt(3) / 2f;
float halfR = R * 0.5f;

// 按顺时针顺序存储所有角点世界坐标
List<Vector3> tileCorners = new List<Vector3>()
{
    tileCenterWorldPos + new Vector3(0, R, 0), // 顶部
    tileCenterWorldPos + new Vector3(halfSqrt3R, halfR, 0), // 右上
    tileCenterWorldPos + new Vector3(halfSqrt3R, -halfR, 0), // 右下
    tileCenterWorldPos + new Vector3(0, -R, 0), // 底部
    tileCenterWorldPos + new Vector3(-halfSqrt3R, -halfR, 0), // 左下
    tileCenterWorldPos + new Vector3(-halfSqrt3R, halfR, 0) // 左上
};

注意事项

如果你的Tilemap调整过Cell Swizzle、单元格缩放、自定义锚点等参数,需要根据实际修改的数值对应调整偏移量的计算逻辑,默认六边形布局下上述代码可直接复用。


内容的提问来源于stack exchange,提问作者manking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:24:03