Unity - Tilemap 包含 - 如何读取 Tilemap 是否包含世界中特定坐标上的图块?

问题描述

我是游戏开发领域的完全菜鸟,但我已经观看了许多关于生成 2D 阵列以设置基于网格的战斗(路径、障碍物等)的视频,但我没有发现可编程的方法直观或视觉友好。

是否可以使用多个瓦片地图设置具有障碍物的关卡?

  • 一个 tilemap 将包括整个级别区域(我将其命名为“General Tilemap”):

    General Tilemap

  • 2nd tilemap 只包含在读取时标记为碰撞的图块(我将其命名为“Collision Tilemap”)并且玩家将无法移动到它们:

    Collision Tilemap

我的逻辑是读取玩家周围的相邻图块,如果:

  1. 通用瓷砖地图上有一个瓷砖,但碰撞瓷砖上没有,玩家可以点击它并移动到那里。
  2. 两个tilemap上都存在一个tile,它被标记为碰撞,不能点击。
  3. 图块不存在,超出边界,无法点击。

您能否让我知道这是否是一种有效的方法(至少对于较小的级别,我不会做任何大的事情,因此可扩展性不是问题),或者我是否完全偏离了路线并且有更好的方法正确地做到这一点? 我目前停留在第一步 - 读取坐标(玩家旁边)上的瓷砖是否存在或两个瓷砖地图为空。尽我最大的努力去弄清楚。

谢谢!

解决方法

通过查找相关的 Tilemap 并使用 hasTile 读取它是否具有值,设法检查 tilemap 是否包含在 Start 函数中的 xy 坐标上的 tile。这将返回一个布尔值。

Tilemap generalTilemap = GameObject.Find("General Tilemap").GetComponent<Tilemap>();
hasGTile = generalTilemap.HasTile(playerTileCoord);

仍然不确定这种方法是否对我长期有效,尤其是当我使用寻路算法时,但我们会看到的!