NavigationLink2D
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — NavigationLink2D
NavigationLink2D
节点继承关系
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
NavigationLink2D 用来连接两块本来不相连的导航区域。想象一座桥连接了河两岸——两岸各自有自己的 NavigationRegion2D(陆地),而桥就是 NavigationLink2D,它告诉寻路系统"虽然这两个点之间没有连续的地面,但你可以从这里走过去"。
使用频率:★★ 偶尔使用——在有关卡跳跃、传送、电梯等特殊通行方式的游戏中会用到
节点用途
- 连接两个不连续的 NavigationRegion2D,让 AI 可以在它们之间寻路
- 实现跳跃点、传送门、电梯、梯子等特殊通行方式的导航
- 支持单向和双向连接(bidirectional 属性控制)
- 可以设置 entry/cost 值来控制 AI 经过此连接的优先级
使用场景
- 跳跃平台:连接两个平台之间,AI 知道可以跳过去
- 电梯/升降机:连接不同楼层之间的导航区域
- 传送门:连接地图上两个远距离的位置
- 梯子/攀爬点:连接地面和高处的导航区域
- 单向通道:比如跳崖(只能从高处到低处),设置 bidirectional 为 false
常用节点搭配
| 搭配节点 | 搭配方式 |
|---|---|
| NavigationRegion2D | Link 连接两个 Region 的边缘位置 |
| NavigationAgent2D | Agent 在寻路时会自动使用 Link 来穿越不连续区域 |
生效必备素材/资源
- 两个独立的 NavigationRegion2D,它们的导航网格没有物理连接
- NavigationLink2D 的 start_position 和 end_position 需要分别落在两个 Region 内
节点属性与信号
属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| start_position | Vector2 | — | 连接起点,通常位于一个 NavigationRegion2D 内 |
| end_position | Vector2 | — | 连接终点,通常位于另一个 NavigationRegion2D 内 |
| bidirectional | bool | true | 是否双向通行。true 表示两个方向都能走,false 表示只能从起点到终点 |
| enabled | bool | true | 是否启用此连接 |
| entry_cost | float | 1.0 | 通行成本,值越大 AI 越倾向于选择其他路线 |
信号
NavigationLink2D 没有特有信号,继承自 Node 的通用信号。
常用方法
| 方法 | 返回值 | 说明 |
|---|---|---|
| is_enabled() | bool | 是否已启用 |
| set_enabled(enabled) | void | 设置是否启用 |
| get_start_position() | Vector2 | 获取连接起点 |
| set_start_position(position) | void | 设置连接起点 |
| get_end_position() | Vector2 | 获取连接终点 |
| set_end_position(position) | void | 设置连接终点 |
| is_bidirectional() | bool | 是否双向连接 |
| set_bidirectional(enabled) | void | 设置是否双向连接 |
代码示例
创建跳跃平台连接
以下示例展示如何用代码创建一个单向跳跃连接:
C
using Godot;
public partial class JumpLinkSetup : Node2D
{
public override void _Ready()
{
var navLink = new NavigationLink2D();
// 设置连接起点(平台 A 的边缘)
navLink.StartPosition = new Vector2(100, 200);
// 设置连接终点(平台 B 的边缘)
navLink.EndPosition = new Vector2(250, 100);
// 设置为单向连接(只能从 A 跳到 B,不能反向)
navLink.Bidirectional = false;
// 设置通行成本(跳跃比走路"贵"一些,AI 会在有选择时优先走路)
navLink.EntryCost = 2.0f;
AddChild(navLink);
GD.Print("跳跃连接已创建!");
}
}GDScript
extends Node2D
func _ready() -> void:
var nav_link = NavigationLink2D.new()
# 设置连接起点(平台 A 的边缘)
nav_link.start_position = Vector2(100, 200)
# 设置连接终点(平台 B 的边缘)
nav_link.end_position = Vector2(250, 100)
# 设置为单向连接(只能从 A 跳到 B,不能反向)
nav_link.bidirectional = false
# 设置通行成本(跳跃比走路"贵"一些)
nav_link.entry_cost = 2.0
add_child(nav_link)
print("跳跃连接已创建!")