如何解决获取网格单元的中心-统一
我正在与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
,好的,我想我找到了问题所在。
如果有人遇到相同的问题,请按以下步骤解决:
- 将精灵枢轴点设置为您想要单元格中间的位置(在我的情况下,是草节的中心)
- 将图块锚点设置回(0.5,0.5)
- 正常使用
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] 举报,一经查实,本站将立刻删除。