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

Unity 2D中获取Grid下TileMap相对于世界中心的位置

Unity 2D TileMap 世界位置获取问题解决

问题本质

TileMap 是 Grid 组件的子对象,TileMap 自身的 Transform 显示的是相对于 Grid 的本地坐标,默认就是 (0,0,0)。真正决定整个 TileMap 世界位置的是父对象 Grid 的 Transform 组件——你移动 Grid,TileMap 才会跟着在世界空间里移动。

解决方案

1. 获取 TileMap 整体的世界位置

直接读取 Grid 的世界坐标即可,因为 TileMap 是 Grid 的子对象且本地坐标为 (0,0,0),两者的世界位置完全一致。

代码示例:

using UnityEngine;
using UnityEngine.Tilemaps;

public class GetTileMapWorldPos : MonoBehaviour
{
    [SerializeField] private Tilemap myTilemap;

    void Start()
    {
        Transform gridTransform = myTilemap.transform.parent;
        Vector3 tilemapWorldPos = gridTransform.position;
        Debug.Log("TileMap 整体世界位置:" + tilemapWorldPos);
    }
}

2. 获取单个 Tile 的世界位置

如果需要 TileMap 中某个特定网格坐标对应的世界位置,用 TileMap 自带的 CellToWorld 方法,它会自动计算 Grid 的单元格大小、间隙等参数:

代码示例:

using UnityEngine;
using UnityEngine.Tilemaps;

public class GetSingleTileWorldPos : MonoBehaviour
{
    [SerializeField] private Tilemap myTilemap;
    [SerializeField] private Vector3Int targetTileGridPos = new Vector3Int(0, 0, 0); // 目标Tile的网格坐标

    void Start()
    {
        Vector3 tileWorldPos = myTilemap.CellToWorld(targetTileGridPos);
        Debug.Log("目标Tile的世界位置:" + tileWorldPos);
    }
}

3. 调整 TileMap 的显示位置

如果想让 TileMap 在 Scene 视图中移动,直接修改 Grid 的 Transform.Position 就行——不要去改 TileMap 自身的坐标,因为它的位置是相对于 Grid 网格的,改了会导致 Tile 显示错位。

额外提示

  • 检查 Inspector 面板时,注意区分 Transform 组件里的「本地坐标(Local Position)」和「世界坐标(World Position)」,可以通过右键 Transform 标题切换显示模式
  • Grid 的 Cell Size 参数会影响每个 Tile 的实际世界大小,CellToWorld 方法会自动考虑这个值,无需手动计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:15:29