Поддержка различных движений актеров

../../_images/nav_actor_locomotion.png

Для поддержки различных способов передвижения актеров, таких как приседание и ползание, требуется аналогичная настройка карты, как для поддержки Поддержка разных типов актеров.

Создавайте различные навигационные сетки с подходящей высотой для присевших или ползающих актеров, чтобы они могли находить пути через узкие участки игрового мира.

Когда актер меняет состояние передвижения, например встает, начинает приседать или ползать, запрашивает соответствующую карту для определения пути.

Если поведение избегания также должно меняться вместе с локомоцией, например, избегать только стоя или избегать только других агентов в том же состоянии локомоции, переключайте агент избегания актера на другую карту избегания при каждом изменении локомоции.

func update_path():

    if actor_standing:
        path = NavigationServer3D.map_get_path(standing_navigation_map_rid, start_position, target_position, true)
    elif actor_crouching:
        path = NavigationServer3D.map_get_path(crouched_navigation_map_rid, start_position, target_position, true)
    elif actor_crawling:
        path = NavigationServer3D.map_get_path(crawling_navigation_map_rid, start_position, target_position, true)

func change_agent_avoidance_state():

    if actor_standing:
        NavigationServer3D.agent_set_map(avoidance_agent_rid, standing_navigation_map_rid)
    elif actor_crouching:
        NavigationServer3D.agent_set_map(avoidance_agent_rid, crouched_navigation_map_rid)
    elif actor_crawling:
        NavigationServer3D.agent_set_map(avoidance_agent_rid, crawling_navigation_map_rid)

Примечание

Хотя запрос пути может быть выполнен немедленно для нескольких карт, переключение карты агента избегания вступит в силу только после следующей синхронизации сервера.