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.
Checking the stable version of the documentation...
내비게이션 보이기
NavigationLink는 경로 찾기를 위해 임의의 거리에 걸쳐 NavigationRegion2D 및 :ref:`NavigationRegion3D<class_NavigationRegion3D>`의 내비게이션 메시 다각형을 연결하는 데 사용됩니다.
NavigationLink는 또한 게임플레이 개체와의 상호작용을 통해 사용할 수 있는 경로 찾기의 이동 바로가기를 고려하는 데에도 사용됩니다. 사다리, 점프 패드 또는 순간 이동.
NavigationJumplinks 노드의 2D 및 3D 버전은 각각 NavigationLink2D 및 :ref:`NavigationLink3D<class_NavigationLink3D>`로 제공됩니다.
서로 다른 NavigationRegions은 겹치는 가장자리나 탐색 맵 edge_connection_margin 내에 있는 가장자리가 있는 한 NavigationLink가 필요 없이 탐색 메시를 연결할 수 있습니다. 거리가 너무 멀어지면 유효한 연결을 구축하는 것이 문제가 됩니다. NavigationLinks가 이 문제를 해결할 수 있습니다.
탐색 영역 사용에 대해 자세히 알아보려면 :ref:`doc_navigation_using_navigationregions`를 참조하세요. 탐색 메시를 연결하는 방법에 대해 자세히 알아보려면 :ref:`doc_navigation_connecting_navmesh`를 참조하세요.
NavigationLinks는 ``navigation_layers``와 같은 NavigationRegions와 많은 속성을 공유합니다. NavigationLinks는 탐색 메시 리소스를 사용하여 더 많은 로컬 통과 가능 영역을 추가하는 NavigationRegions에 비해 임의 거리에 있는 두 위치 사이에 단일 연결을 추가합니다.
NavigationLink에는 start_position 및 end_position``가 있으며 ``bidirectional``가 활성화되면 양방향으로 이동할 수 있습니다. 네비게이션 링크가 배치되면 경로 찾기를 위해 검색 반경 내에서 ``start_position 및 ``end_position``에 가장 가까운 네비게이션 메시 다각형을 연결합니다.
다각형 검색 반경은 navigation/2d_or_3d/default_link_connection_radius 아래의 프로젝트 설정에서 전체적으로 구성하거나 NavigationServer.map_set_link_connection_radius() 기능을 사용하여 각 내비게이션 **지도**에 대해 개별적으로 설정할 수 있습니다.
start_position 및 end_position 모두 에디터에 디버그 마커가 있습니다. 화살표는 링크가 이동할 수 있는 방향을 나타내며, 위치의 눈에 보이는 반경은 다각형 검색 반경을 나타냅니다. 내부의 모든 내비게이션 메시 다각형이 비교되고 가장자리 연결을 위해 가장 가까운 다각형이 선택됩니다. 검색 반경 내에서 유효한 다각형이 발견되지 않으면 탐색 링크가 비활성화됩니다.
링크 디버그 시각적 개체는 debug/shapes/navigation 아래의 편집기 :ref:`ProjectSettings<class_ProjectSettings>`에서 변경할 수 있습니다. 디버그 가시성은 Editor 3D 뷰포트 기즈모 메뉴에서도 제어할 수 있습니다.
내비게이션 링크는 링크를 통한 특별한 이동을 제공하지 않습니다. 대신, 에이전트가 링크 위치에 도달하면 게임 코드는 반응해야 하며(예: 영역 트리거를 통해) 에이전트가 링크를 통해 이동하여 링크의 다른 위치에 도달할 수 있는 수단(예: 텔레포트 또는 애니메이션을 통해)을 제공해야 합니다. 이것이 없으면 에이전트는 링크 경로를 따라 스스로 이동하려고 시도합니다. 움직이는 플랫폼을 기다리거나 텔레포터를 통과하여 벽을 통과하는 대신 에이전트가 바닥 없는 구덩이 위를 걷는 것으로 끝날 수 있습니다.
스크립트 템플릿 만들기
다음 스크립트는 NavigationServer를 사용하여 새 탐색 링크를 만듭니다.
extends Node2D
var link_rid: RID
var link_start_position: Vector2
var link_end_position: Vector2
func _ready() -> void:
link_rid = NavigationServer2D.link_create()
var link_owner_id: int = get_instance_id()
var link_enter_cost: float = 1.0
var link_travel_cost: float = 1.0
var link_navigation_layers: int = 1
var link_bidirectional: bool = true
NavigationServer2D.link_set_owner_id(link_rid, link_owner_id)
NavigationServer2D.link_set_enter_cost(link_rid, link_enter_cost)
NavigationServer2D.link_set_travel_cost(link_rid, link_travel_cost)
NavigationServer2D.link_set_navigation_layers(link_rid, link_navigation_layers)
NavigationServer2D.link_set_bidirectional(link_rid, link_bidirectional)
# Enable the link and set it to the default navigation map.
NavigationServer2D.link_set_enabled(link_rid, true)
NavigationServer2D.link_set_map(link_rid, get_world_2d().get_navigation_map())
# Move the 2 link positions to their intended global positions.
NavigationServer2D.link_set_start_position(link_rid, link_start_position)
NavigationServer2D.link_set_end_position(link_rid, link_end_position)
using Godot;
public partial class MyNode2D : Node2D
{
private Rid _linkRid;
private Vector2 _linkStartPosition;
private Vector2 _linkEndPosition;
public override void _Ready()
{
_linkRid = NavigationServer2D.LinkCreate();
ulong linkOwnerId = GetInstanceId();
float linkEnterCost = 1.0f;
float linkTravelCost = 1.0f;
uint linkNavigationLayers = 1;
bool linkBidirectional = true;
NavigationServer2D.LinkSetOwnerId(_linkRid, linkOwnerId);
NavigationServer2D.LinkSetEnterCost(_linkRid, linkEnterCost);
NavigationServer2D.LinkSetTravelCost(_linkRid, linkTravelCost);
NavigationServer2D.LinkSetNavigationLayers(_linkRid, linkNavigationLayers);
NavigationServer2D.LinkSetBidirectional(_linkRid, linkBidirectional);
// Enable the link and set it to the default navigation map.
NavigationServer2D.LinkSetEnabled(_linkRid, true);
NavigationServer2D.LinkSetMap(_linkRid, GetWorld2D().NavigationMap);
// Move the 2 link positions to their intended global positions.
NavigationServer2D.LinkSetStartPosition(_linkRid, _linkStartPosition);
NavigationServer2D.LinkSetEndPosition(_linkRid, _linkEndPosition);
}
}
extends Node3D
var link_rid: RID
var link_start_position: Vector3
var link_end_position: Vector3
func _ready() -> void:
link_rid = NavigationServer3D.link_create()
var link_owner_id: int = get_instance_id()
var link_enter_cost: float = 1.0
var link_travel_cost: float = 1.0
var link_navigation_layers: int = 1
var link_bidirectional: bool = true
NavigationServer3D.link_set_owner_id(link_rid, link_owner_id)
NavigationServer3D.link_set_enter_cost(link_rid, link_enter_cost)
NavigationServer3D.link_set_travel_cost(link_rid, link_travel_cost)
NavigationServer3D.link_set_navigation_layers(link_rid, link_navigation_layers)
NavigationServer3D.link_set_bidirectional(link_rid, link_bidirectional)
# Enable the link and set it to the default navigation map.
NavigationServer3D.link_set_enabled(link_rid, true)
NavigationServer3D.link_set_map(link_rid, get_world_3d().get_navigation_map())
# Move the 2 link positions to their intended global positions.
NavigationServer3D.link_set_start_position(link_rid, link_start_position)
NavigationServer3D.link_set_end_position(link_rid, link_end_position)
using Godot;
public partial class MyNode3D : Node3D
{
private Rid _linkRid;
private Vector3 _linkStartPosition;
private Vector3 _linkEndPosition;
public override void _Ready()
{
_linkRid = NavigationServer3D.LinkCreate();
ulong linkOwnerId = GetInstanceId();
float linkEnterCost = 1.0f;
float linkTravelCost = 1.0f;
uint linkNavigationLayers = 1;
bool linkBidirectional = true;
NavigationServer3D.LinkSetOwnerId(_linkRid, linkOwnerId);
NavigationServer3D.LinkSetEnterCost(_linkRid, linkEnterCost);
NavigationServer3D.LinkSetTravelCost(_linkRid, linkTravelCost);
NavigationServer3D.LinkSetNavigationLayers(_linkRid, linkNavigationLayers);
NavigationServer3D.LinkSetBidirectional(_linkRid, linkBidirectional);
// Enable the link and set it to the default navigation map.
NavigationServer3D.LinkSetEnabled(_linkRid, true);
NavigationServer3D.LinkSetMap(_linkRid, GetWorld3D().NavigationMap);
// Move the 2 link positions to their intended global positions.
NavigationServer3D.LinkSetStartPosition(_linkRid, _linkStartPosition);
NavigationServer3D.LinkSetEndPosition(_linkRid, _linkEndPosition);
}
}