微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取网格单元的中心-统一

如何解决获取网格单元的中心-统一

我正在与Unity进行等距游戏,因此我需要知道单元在世界坐标中的中心。我正在使用tilemap的GetCellCenterWorld()方法,但是它给了我不好的结果。 Here是我希望成为单元格的中心(基本上是逻辑中心),但是here是Unity所返回的内容(单元格的最高顶点?)。我相信它与精灵的枢轴点(现在已设置为其顶部中心)或图块贴图属性中的单元锚(我将其设置为(1,1))有关。

这是我用来“选择”磁贴的代码

public class GridSelection : MonoBehavIoUr
{
    public Tilemap tilemap;
    public Transform selector;

    void Update()
    {
        Vector3 worldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        worldPos.z = 0;

        Vector3Int tilemapPos = tilemap.WorldToCell(worldPos);
        selector.position = tilemap.GetCellCenterWorld(tilemapPos);
    }
}

如何获取单元格的实际中点?

解决方法

尝试tilemap.cellBounds.center https://docs.unity3d.com/ScriptReference/Tilemaps.Tilemap.html

,

好的,我想我找到了问题所在。

如果有人遇到相同的问题,请按以下步骤解决:

  1. 将精灵枢轴点设置为您想要单元格中间的位置(在我的情况下,是草节的中心)
  2. 将图块锚点设置回(0.5,0.5)
  3. 正常使用GetCellCenterWorld()方法

我在问题中发布的代码现在可以正常工作。

,
[SerializeField] private Tilemap map;
private Camera camera;
[SerializeField] private Transform playerTransform;

void Start(){
    camera = Camera.main;
}

// Update is called once per frame
void Update(){
    if (Input.GetMouseButtonDown(0)){
        var worldPos = camera.ScreenToWorldPoint(Input.mousePosition);
        Vector3Int tilemapPos = map.WorldToCell(worldPos);
        playerTransform.position = map.CellToWorld(tilemapPos);
        Debug.Log(tilemapPos);
    }
}

playerTransform.position = map.CellToWorld(clickedCellPosition);

只需将其转换回来并提供 tilemapPos

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。