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



我正在与Unity进行等距游戏,我需要知道细胞在世界坐标中的中心。我正在使用tilemap的GetCellCenterWorld()方法,但它会给我返回糟糕的结果。这是我所期望的单元的中心(基本上是逻辑中心(,但这是Unity所得到的(单元的顶部顶点?(。我认为这与精灵的轴心点(现在设置为其顶部中心(或tilemap属性中的单元锚有关(我将其设置为(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);
}
}

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

好吧,我想我发现了问题所在。

如果有人有同样的问题,下面是我解决的方法:

  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(单击CellPosition(;

只需将其转换回并提供tilemapPos

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

相关内容

  • 没有找到相关文章

最新更新