unity-game-engine - 如何获取瓦片 map 中瓦片的 x,y 坐标位置?

标签 unity-game-engine

我刚刚开始习惯使用 Unity 的新图 block map 工具 (UnityEngine.Tilemaps)。

我遇到的一个问题是我不知道如何通过脚本获取放置的图 block 的 x,y 坐标。我试图将脚本中图 block map 上的 scriptableObject 移动到玩家单击的新位置,但我不知道如何获取单击的图 block 位置的坐标。 Tile 类似乎没有任何位置属性(Tile 对它的位置一无所知),因此 Tilemap 必须有答案。我无法在 Unity 文档中找到有关如何获取 Tilemap 中选定图 block 的 Vector3 坐标的任何内容。

最佳答案

如果您有权访问Tile例如,您可以使用其变换(或单击时的光线转换)来获取其世界位置,然后通过 WorldToCell 获取图 block 坐标。你的方法Grid组件(查看 documentation )。

编辑:

Unity 似乎没有实例化图 block ,而是仅使用一个图 block 对象来管理该类型的所有图 block ,我不知道这一点。

要获得正确的位置,您必须自己计算。以下示例说明了如果网格位于 z = 0 的 xy 平面上,如何获取鼠标光标处的图 block 位置

// get the grid by GetComponent or saving it as public field
Grid grid;
// save the camera as public field if you using not the main camera
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
// get the collision point of the ray with the z = 0 plane
Vector3 worldPoint = ray.GetPoint(-ray.origin.z / ray.direction.z);
Vector3Int position = grid.WorldToCell(worldPoint);

关于unity-game-engine - 如何获取瓦片 map 中瓦片的 x,y 坐标位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48277320/

相关文章:

c# - Unity3D 速度黑客检测

javascript - Unity Raycast2D 仅拍摄 1 个单元

unity-game-engine - 如何将 MonoBehaviour 移动到外部程序集并且不卡在 "Missing (mono script)"中?

unity-game-engine - 相机偏移|探戈计划

c# - 非碰撞体点击事件

c# - 当我输入字母 "o"而不是整数时,Monodevelop 崩溃

c# - 如何在运行时更新中仅在需要时更新列表?

c++ - Direct3D map 像素黑色

android - 在 Unity 中检测 Oculus Quest 1 和 2 耳机

unity-game-engine - Unity 2019.2.9f1 在 MacOS Mojave 上崩溃