示例工程【免费下载链接】godot-demo-projectsDemonstration and Template Projects项目地址https://gitcode.com/GitHub_Trending/go/godot-demo-projects点击查看免费下载本指南以 godot-demo-projects 仓库中的2d/navigation演示为蓝本系统讲解在 Godot 4.x 中如何借助NavigationRegion2D、NavigationPolygon与NavigationAgent2D三个核心节点实现完整的 2D 寻路与移动控制。读完本文你将掌握绘制导航多边形 → 烘焙导航网格 → 设置代理参数 → 点击目标点自动寻路的完整实战链路并能直接复用到自己的 2D 游戏项目中。演示概览与核心组成2d/navigation是一个使用 GDScript 编写、渲染后端为 CompatibilityGL 兼容的 2D 导航演示。它的核心玩法很简单角色Character站在一张迷宫式地图上玩家用鼠标左键点击任意位置角色便会自动计算并沿路径移动到目标点。整个演示由以下资源组成2d/navigation/navigation.tscn主场景挂载NavigationRegion2D与地图、角色、摄像机2d/navigation/navigation_polygon.res导航多边形资源NavigationPolygon定义了可通行区域2d/navigation/character.tscn角色场景基于CharacterBody2D并携带NavigationAgent2D2d/navigation/character.gd角色寻路与移动的核心逻辑2d/navigation/project.godot项目配置包含自定义输入动作click、物理帧率与渲染设置。该演示涉及 Godot 2D 导航体系中最关键的三类 API它们是理解本文全部内容的基础类职责NavigationRegion2D承载导航多边形资源的节点定义哪些区域可以行走NavigationPolygon描述可通行区域的几何数据顶点、多边形、轮廓线、烘焙参数NavigationAgent2D挂在移动角色身上的代理节点负责查询路径并引导角色移动主场景搭建NavigationRegion2D 的挂载方式打开 navigation.tscn 可以看到场景树结构它的组织方式正是 2D 导航项目的标准范式Navigation (Node2D) ├── Map (Sprite2D) # 背景地图贴图z_index -1 ├── NavigationRegion2D # 导航区域引用 navigation_polygon.res ├── Character # 角色实例CharacterBody2D NavigationAgent2D └── Camera2D # 跟随摄像机关键点在于NavigationRegion2D节点通过navigation_polygon属性直接引用了外部资源res://navigation_polygon.res见场景文件第 14-15 行[node nameNavigationRegion2D typeNavigationRegion2D parent.] navigation_polygon ExtResource(2_lph0a)把导航多边形做成独立的.res资源而不是内嵌在场景里是一个值得借鉴的设计同一张导航多边形可以被多个场景、多个NavigationRegion2D节点共享复用也便于在编辑器中单独维护和重新烘焙。导航多边形资源可通行区域是如何定义的navigation_polygon.res是 Godot 编辑器序列化出的二进制资源内部以 RSRC 格式存储。从资源头部字段可以看出它完整记录了NavigationPolygon的全部关键数据vertices多边形顶点坐标列表polygons由顶点索引构成的可通行多边形outlines轮廓线数据用于从闭合轮廓烘焙出多边形sample_partition_type、parsed_geometry_type、parsed_collision_mask、source_geometry_mode烘焙来源与分区策略配置cell_size、border_size、agent_radius、baking_rect、baking_rect_offset烘焙参数。其中agent_radius代理半径直接决定烘焙结果中路径通道的宽度——走廊过窄而半径过大时该区域会被判定为不可通行。因此烘焙导航网格时一定要参考游戏中实际移动单位的尺寸来设置代理半径而不是随意填一个值。在 Godot 编辑器中有两种方式生成这份资源手动绘制在选中NavigationRegion2D节点的编辑模式下使用多边形工具直接勾勒可通行区域凹多边形与凸多边形均可随后在属性面板的 NavigationPolygon 资源上点击烘焙Bake从几何体解析在资源属性中设置parsed_geometry_type与parsed_collision_mask让导航多边形自动解析场景中的静态碰撞体或网格体轮廓再执行烘焙。本演示采用不规则迷宫式可通行布局从运行截图可见可通行区域是一条浅蓝白色、带柔和轮廓的弯折通道通道内部是深色障碍物形成多转折的寻路地形——这种形状正好用来验证寻路算法在复杂路径下的表现。角色场景CharacterBody2D 与 NavigationAgent2D 的组合角色由 character.tscn 定义节点结构为Character (CharacterBody2D) ├── Sprite2D # 显示角色贴图 ├── CollisionShape2D # CapsuleShape2D 胶囊碰撞体radius7, height22 └── NavigationAgent2D # 寻路代理选择CharacterBody2D作为移动载体是非常典型的做法它自带move_and_slide()物理移动接口配合碰撞体即可在寻路过程中与障碍物保持物理交互同时由NavigationAgent2D负责走哪条路的计算两者职责清晰分离。核心脚本点击寻路的完整调用链character.gd 只有不到 40 行却串起了 2D 导航的全部核心 API。下面按生命周期逐段拆解。1. 初始化代理参数extends CharacterBody2D var movement_speed : 200.0 onready var navigation_agent: NavigationAgent2D $NavigationAgent2D func _ready() - void: # These values need to be adjusted for the actors speed # and the navigation layout. navigation_agent.path_desired_distance 2.0 navigation_agent.target_desired_distance 2.0 navigation_agent.debug_enabled truemovement_speed 200.0角色的移动速度像素/秒与物理帧率共同决定每一步的位移量path_desired_distance 2.0代理在重新请求下一个路径点前与当前路径点的最小距离。值越小对路径的贴合度越高但也会增加路径点切换的频率target_desired_distance 2.0代理认为已到达目标的判定半径。距离小于该值时导航视为完成debug_enabled true开启代理调试可视化运行时可以看到路径线与目标标记方便验证寻路结果。脚本注释特别提醒这两个距离参数需要根据角色移动速度与导航布局进行调整——速度越快、走廊越窄越需要适当放大距离值否则角色会在目标点附近来回抖动。2. 输入事件把鼠标点击变成移动目标# The click event is a custom input action defined in # Project Project Settings Input Map tab. func _unhandled_input(input_event: InputEvent) - void: if not input_event.is_action_pressed(click): return set_movement_target(get_global_mouse_position()) func set_movement_target(movement_target: Vector2) - void: navigation_agent.target_position movement_target这里的关键 API 是navigation_agent.target_position只要把目标坐标赋给它导航代理便会自动在地图上查询路径。鼠标世界坐标通过get_global_mouse_position()获取。输入动作click是自定义动作在 project.godot 的[input]段定义绑定了鼠标左键button_index1[input] click{ deadzone: 0.2, events: [Object(InputEventMouseButton, ..., button_index:1, ...)] }3. 物理帧内沿路径移动func _physics_process(_delta: float) - void: if navigation_agent.is_navigation_finished(): return var current_agent_position: Vector2 global_position var next_path_position: Vector2 navigation_agent.get_next_path_position() velocity current_agent_position.direction_to(next_path_position) * movement_speed move_and_slide()每帧的逻辑清晰明了is_navigation_finished()判断是否已到达目标已到达则直接返回避免角色原地空转get_next_path_position()从代理内部缓存的路线上取下一个路径点——注意这个方法返回的是世界坐标可直接用于移动direction_to()计算角色当前位置到下一个路径点的单位方向乘以速度得到velocitymove_and_slide()执行物理移动这也是为什么脚本放在_physics_process而非_process中——物理移动必须在物理帧内进行。这套查询路径点 → 计算方向 → move_and_slide的三步循环是 Godot 2D 导航移动的标准写法几乎所有基于NavigationAgent2D的角色移动都遵循同一模式。项目配置输入映射与物理帧率navigation_polygon.res 所在的演示项目在 project.godot 中做了如下关键配置输入动作[input]段定义了名为click的动作绑定鼠标左键供脚本中的is_action_pressed(click)使用物理帧率common/physics_ticks_per_second120即物理帧每秒 120 次配合move_and_slide()可让角色移动更加平滑物理插值common/physics_interpolationtrue开启物理插值进一步消除高速运动下的画面抖动渲染后端renderer/rendering_methodgl_compatibility该演示使用兼容性渲染器对低端设备与网页导出更友好窗口与拉伸window/size/viewport_width800、window/stretch/modecanvas_items、aspectexpand窗口按画布尺寸等比拉伸。若你打算在自己的项目中复刻此演示只需要三步把character.gd挂到带NavigationAgent2D子节点的CharacterBody2D上、在项目设置中添加click输入动作、为场景创建NavigationRegion2D并烘焙导航多边形。运行效果与调试技巧运行演示后主场景为res://navigation.tscn你会看到角色出现在地图可通行区域的起始位置点击地图上任意可通行位置角色即沿蓝色路径自动移动过去。由于开启了debug_enabled运行时编辑器视口内会叠加显示导航路径这为排查路径绕远穿墙目标不可达等问题提供了直接的可视化依据。几个实用的调试与优化建议观察路径贴合度若角色在转弯处抄近道穿过障碍边缘可适当减小path_desired_distance处理目标不可达当点击点在障碍物内部或不可通行区域时导航代理会自动寻找最近的可行走点作为实际目标这是 Godot 导航系统的内置行为配合障碍物变化如果你的游戏有动态障碍物门、箱子等可以研究NavigationRegion2D的bake_navigation_polygon()运行时重新烘焙或借助仓库中同类的 2D 导航进阶示例如 2d/navigation_astar 的 A* 寻路变体、2d/navigation_mesh_chunks 的分块导航网格方案做扩展。小结2d/navigation演示虽小却完整覆盖了 Godot 2D 导航的三大核心要素用NavigationPolygon描述可通行区域、用NavigationRegion2D承载导航数据、用NavigationAgent2D驱动角色寻路。理解 character.gd 中设置目标 → 取路径点 → move_and_slide的循环以及 project.godot 中输入映射与物理配置的作用你就掌握了把任意 2D 角色接入导航系统的通用方法可以在此基础上继续扩展队伍跟随、动态避障、运行时重烘焙等更复杂的导航能力。赞分享示例工程【免费下载链接】godot-demo-projectsDemonstration and Template Projects项目地址https://gitcode.com/GitHub_Trending/go/godot-demo-projects点击查看免费下载相关推荐Godot 2D 大型世界导航网格分块烘焙实践Navigation Mesh Chunks 2D 源码解析Godot 2D 大型世界导航网格分块烘焙实践Navigation Mesh Chunks 2D 源码解析 导读 本文基于 godot demo projec示例工程终极指南Godot 4.3版本中2D导航多边形的烘焙问题完全解析终极指南Godot 4.3版本中2D导航多边形的烘焙问题完全解析 Godot引擎作为一款功能强大的开源游戏引擎其 2D导航系统 在游戏开发中扮演着至关重要的示例工程Silero VAD PyTorch 转 ONNX 实战三步把语音活动检测跑上任意设备Silero VAD PyTorch 转 ONNX 实战三步把语音活动检测跑上任意设备 Silero VAD 是一款企业级开源语音活动检测VAD模型用来示例工程上一篇gh_mirrors/vi/vivado-library完全解析FPGA开发者必备的IP核与模块资源库下一篇5分钟上手TMagic Editor腾讯开源的终极富文本编辑解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考