Godot 4.3(beta3)中,在新的TileMapLayer节点中避开障碍物

问题描述 投票:0回答:1

我不明白如何使用

NavigationAgent2D
路径处理 TileMapsLayers 中的障碍物(具有物理层的区域)。

这就是我目前所拥有的。

我有一个简单的场景世界,只有 2 个

TileMapLayers

enter image description here

  • 岛屿层,我配置了所有导航图块。

enter image description here

  • 障碍物层中,我在一些图块上配置了物理层。

enter image description here

在此示例中(它应该是一棵由 2 个图块组成的树),仅覆盖了精灵的下半部分。上半部分没有被覆盖。

我还为 ennemis 添加了

NavigationAgent2D

enter image description here

如果我运行游戏,敌人一撞上树就会被卡住。

所以,我尝试在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 中的物理层覆盖的所有区域?

我现在能做什么?我是戈多的新手,所以也许我错过了一些明显的东西。如果是这样,请随时告诉我。

navigation godot godot4
1个回答
0
投票

尝试

func _use_tile_data_runtime_update(coords: Vector2i) -> bool:
    return coords in obstacles.get_used_cells()

这对我有用

© www.soinside.com 2019 - 2024. All rights reserved.