在 Unity 编辑器中使用等距网格将 Gizmo 居中时遇到问题,其中 Z 轴用作 Y 轴

问题描述 投票:0回答:1

我试图使 OnDrawGizmos() 中的框在每个图块内等距居中。如您所见,我想知道每个图块的坐标并始终将它们显示在编辑器中。正如您所看到的,它们与每个图块都不太适合,我不知道如何修复它。这是代码;我希望你能帮我一把。预先感谢。

我的代码结果的图像

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;
        foreach (Vector3Int pos in tilemap.cellBounds.allPositionsWithin)
        {
            TileBase tile = tilemap.GetTile(pos);
            if (tile != null)
            {
                Vector3 worldPos = grid.CellToWorld(pos);

                Handles.Label(worldPos, pos.ToString());

                Gizmos.DrawWireCube(worldPos, grid.cellSize);
            }
        }
    }
}
c# unity-game-engine isometric
1个回答
0
投票

为了使 Gizmo 适合对象,您需要将变换矩阵设置为 Gizmos.matrix 属性。

所有变换属性都通过该矩阵与您的对象相关。 使用

Vector3.zero
表示位置,使用
Vector3.one
表示比例,以便精确匹配对象。

Gizmos.matrix = myObject.transform.localToWorldMatrix;
Gizmos.DrawCube(Vector3.zero, Vector3.one);

对于瓦片地图,看起来您可以通过瓦片数据检索矩阵。

Gizmos.matrix = tileData.transform;

创建完小控件后,请确保将矩阵设置回单位矩阵。

Gizmos.matrix = Matrix4x4.identity;
© www.soinside.com 2019 - 2024. All rights reserved.