Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Supportare la locomozione di diversi attori

../../_images/nav_actor_locomotion.png

Per supportare diverse tipologie di locomozione degli attori, come accovacciarsi e strisciare, è necessaria una configurazione della mappa simile a supportare Supportare diversi tipi di attori.

Preparare diverse mesh di navigazione con un'altezza appropriata per gli attori accovacciati o striscianti, in modo che possano trovare percorsi attraverso le sezioni strette del mondo di gioco.

Quando un attore cambia stato di locomozione, ad esempio si alza in piedi, comincia ad accovacciarsi o a gattonare, richiedere la mappa appropriata per un percorso.

Se anche il comportamento di evitamento dovesse cambiare con la locomozione, ad esempio evitando solo stando in piedi o evitando solo altri agenti nello stesso stato di locomozione, cambiare l'agente di evitamento dell'attore in un'altra mappa di evitamento a ogni cambio di locomozione.

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)

Nota

Sebbene sia possibile eseguire una ricerca di percorso immediatamente per più mappe, il cambio di mappa dell'agente di evitamento avrà effetto solo dopo la prossima sincronizzazione del server.