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.

Utilizzo di strati di navigazione

Gli strati di navigazione sono una funzionalità opzionale che consente di controllare ulteriormente quali mesh di navigazione sono considerate in una query di percorso. Funzionano similmente a come gli strati fisici controllano le collisioni tra oggetti o come gli strati visivi controllano ciò che è renderizzato nella Viewport.

È possibile assegnare nomi agli strati di navigazione nelle Impostazioni del progetto allo stesso modo degli strati fisici o visivi.

../../_images/navigationlayers_naming.png

If a region has not a single compatible navigation layer with the navigation_layers parameter of a path query this regions navigation mesh will be skipped in pathfinding. See Utilizzo dei NavigationPath for more information on querying the NavigationServer for paths.

NavigationLayers are a single int value that is used as a bitmask. Many navigation related nodes have set_navigation_layer_value() and get_navigation_layer_value() functions to set and get a layer number directly without the need for more complex bitwise operations.

Negli script è possibile usare le seguenti funzioni ausiliari per lavorare con la maschera di bit navigation_layers.

func change_layers():
    var region: NavigationRegion2D = get_node("NavigationRegion2D")
    # enables 4-th layer for this region
    region.navigation_layers = enable_bitmask_inx(region.navigation_layers, 4)
    # disables 1-rst layer for this region
    region.navigation_layers = disable_bitmask_inx(region.navigation_layers, 1)

    var agent: NavigationAgent2D = get_node("NavigationAgent2D")
    # make future path queries of this agent ignore regions with 4-th layer
    agent.navigation_layers = disable_bitmask_inx(agent.navigation_layers, 4)

    var path_query_navigation_layers: int = 0
    path_query_navigation_layers = enable_bitmask_inx(path_query_navigation_layers, 2)
    # get a path that only considers 2-nd layer regions
    var path: PackedVector2Array = NavigationServer2D.map_get_path(
        map,
        start_position,
        target_position,
        true,
        path_query_navigation_layers
        )

static func is_bitmask_inx_enabled(_bitmask: int, _index: int) -> bool:
    return _bitmask & (1 << _index) != 0

static func enable_bitmask_inx(_bitmask: int, _index: int) -> int:
    return _bitmask | (1 << _index)

static func disable_bitmask_inx(_bitmask: int, _index: int) -> int:
    return _bitmask & ~(1 << _index)

Modificare gli strati di navigazione per le query di percorso è un'alternativa efficiente per le prestazioni all'abilitare/disabilitare intere regioni di navigazione. Rispetto alle modifiche di regioni, una query del percorso di navigazione con diversi strati di navigazione non attiva aggiornamenti su larga scala sul NavigationServer.

Modificare gli strati di navigazione dei nodi NavigationAgent avrà effetto immediato sulla successiva query di percorso. Modificare gli strati di navigazione delle regioni avrà effetto dopo la successiva sincronizzazione del NavigationServer.