我不明白如何使用
NavigationAgent2D
路径处理 TileMapsLayers 中的障碍物(具有物理层的区域)。
这就是我目前所拥有的。
我有一个简单的场景世界,只有 2 个
TileMapLayers
。
在此示例中(它应该是一棵由 2 个图块组成的树),仅覆盖了精灵的下半部分。上半部分没有被覆盖。
我还为 ennemis 添加了
NavigationAgent2D
。
如果我运行游戏,敌人一撞上树就会被卡住。
所以,我尝试在Island层中添加一个脚本:
extends TileMapLayer
@onready var obstacles: TileMapLayer = $"../Obstacles"
func _use_tile_data_runtime_update(coords: Vector2i) -> bool:
return coords in obstacles.get_used_cells_by_id(0)
func _tile_data_runtime_update(coords: Vector2i, tile_data: TileData) -> void:
tile_data.set_navigation_polygon(0, null)
但是使用此脚本,所有包含来自障碍层的图块的图块都将被完全删除。
我只需要从障碍层中删除带有物理多边形的部分。在我的树示例中,我不想从导航中删除上半部分(敌人应该走在树的上半部分后面)。有时,我什至想从导航中删除一小部分图块。
或者,也许,我需要告诉我的 NavigationAgent2D 避免此 TileSet 中的物理层覆盖的所有区域?
我现在能做什么?我是戈多的新手,所以也许我错过了一些明显的东西。如果是这样,请随时告诉我。
尝试
func _use_tile_data_runtime_update(coords: Vector2i) -> bool:
return coords in obstacles.get_used_cells()
这对我有用