支持不同角色运动

../../_images/nav_actor_locomotion.png

要支持不同的角色运动,比如下蹲和爬行,需要和支持 支持不同角色类型 一样的地图设置。

为蹲伏或爬行的演员烘焙具有适当高度的不同导览网格,以便他们可以找到穿过游戏世界中这些狭窄部分的路径。

当 actor 改变运动状态时,例如站起来、开始蹲下或爬行,查询适当的地图以获取路径。

如果回避行为也应该随着运动而改变,例如仅在站立时回避或仅避开处于相同运动状态的其他代理,则随着每次运动的改变,将参与者的回避代理切换到另一个回避图。

GDScript

  1. func update_path():
  2. if actor_standing:
  3. path = NavigationServer3D.map_get_path(standing_navigation_map_rid, start_position, target_position, true)
  4. elif actor_crouching:
  5. path = NavigationServer3D.map_get_path(crouched_navigation_map_rid, start_position, target_position, true)
  6. elif actor_crawling:
  7. path = NavigationServer3D.map_get_path(crawling_navigation_map_rid, start_position, target_position, true)
  8. func change_agent_avoidance_state():
  9. if actor_standing:
  10. NavigationServer3D.agent_set_map(avoidance_agent_rid, standing_navigation_map_rid)
  11. elif actor_crouching:
  12. NavigationServer3D.agent_set_map(avoidance_agent_rid, crouched_navigation_map_rid)
  13. elif actor_crawling:
  14. NavigationServer3D.agent_set_map(avoidance_agent_rid, crawling_navigation_map_rid)

备注

虽然可以对多个地图立即执行路径查询,但回避代理地图切换只有在下一次服务器同步后才会生效。