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

Unity编辑器中等距网格(Z轴为Y轴)Gizmo居中问题求助

Tilemap线框居中与坐标显示修复

你的问题核心是CellToWorld返回的是单元格的原点位置(默认对应Tile的左下角),而Gizmos.DrawWireCube需要传入立方体的中心点坐标,同时坐标标签的位置也需要调整才能正常显示在Tile区域内。

修改后的代码如下:

using UnityEngine;
using UnityEditor;
using UnityEngine.Tilemaps;

[ExecuteAlways]
public class TilemapDebugger : MonoBehaviour
{
    public Grid grid; 

    private void OnDrawGizmos()
    {
        if (grid == null) return;

        Tilemap[] tilemaps = grid.GetComponentsInChildren<Tilemap>();

        foreach (Tilemap tilemap in tilemaps)
        {
            DrawTilePositions(tilemap, Color.green);
        }
    }

    private void DrawTilePositions(Tilemap tilemap, Color color)
    {
        Gizmos.color = color;
        // 预计算单元格半尺寸,避免重复计算
        Vector3 halfCellSize = grid.cellSize * 0.5f;
        
        foreach (Vector3Int pos in tilemap.cellBounds.allPositionsWithin)
        {
            TileBase tile = tilemap.GetTile(pos);
            if (tile != null)
            {
                Vector3 worldPos = grid.CellToWorld(pos);
                // 计算Tile的中心世界坐标
                Vector3 tileCenter = worldPos + halfCellSize;

                // 将坐标标签显示在Tile中心上方,避免与线框重叠
                Handles.Label(tileCenter + new Vector3(0, 0.2f, 0), pos.ToString());

                // 以Tile中心为基准绘制线框立方体
                Gizmos.DrawWireCube(tileCenter, grid.cellSize);
            }
        }
    }
}

关键改动说明

  • 计算halfCellSize:提前算出单元格尺寸的一半,避免循环内重复计算,提升效率。
  • 修正线框中心:通过worldPos + halfCellSize得到Tile的中心坐标,确保线框完美贴合Tile边界并居中。
  • 调整标签位置:将坐标标签移到Tile中心上方,避免被线框遮挡,同时保证标签始终处于Tile的可视范围内。

内容的提问来源于stack exchange,提问作者Sergio García Vico

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:13:11