前言
在 Godot 4.x 的 2D 游戏开发中,合理使用不同类型的节点是构建游戏逻辑、画面和交互的基础。
以下是 最常用、最核心的 2D 节点分类与详解。
基础容器类(组织结构)
| 节点 | 用途 | 说明 |
|---|---|---|
Node2D |
通用 2D 容器 | 最基础的 2D 节点,用于分组、作为父节点,无视觉或物理功能 |
CanvasLayer |
UI 或 HUD 层 | 用于创建不受摄像机影响的界面(如血条、分数),可设置 layer 优先级 |
✅ 建议:
所有 2D 游戏对象都应放在
Node2D或其子类下。
角色与移动对象
| 节点 | 用途 | 关键方法/特性 |
|---|---|---|
CharacterBody2D |
玩家、敌人等可控角色 | - 使用 move_and_slide()- 提供 is_on_floor() 等检测- 需搭配 CollisionShape2D |
RigidBody2D |
受物理影响的物体(如箱子、球) | - 自动受重力、力、碰撞影响- 可设 mode(Static/Kinematic/Character/Rigid)- 性能开销较高 |
AnimatableBody2D |
可移动的静态平台(Godot 4 新增) | - 替代旧版“移动的 StaticBody”- 可通过动画或脚本移动,仍能被 CharacterBody2D 站在上面 |
⚠️ 注意:
不要用
RigidBody2D做玩家控制角色!响应延迟高,难以精确控制。
环境与静态物体
| 节点 | 用途 |
|---|---|
StaticBody2D |
地面、墙壁、不可移动障碍物 |
TileMap |
大型关卡地图(由图块拼接)→ 需配合 TileSet 资源,支持碰撞、导航、Z-index 等 |
注意
TileMap是做平台关卡、RPG 地图的首选!
视觉渲染节点
| 节点 | 用途 | 说明 |
|---|---|---|
Sprite2D |
显示单张图片(PNG/JPG) | 支持翻转、缩放、调色 |
AnimatedSprite2D |
播放帧动画 | 需配置 SpriteFrames 资源 |
TextureRect |
显示带纹理的矩形(常用于 UI) | 可拉伸、裁剪、九宫格 |
ColorRect |
纯色矩形 | 极轻量,适合做背景、遮罩、地面颜色块 |
Polygon2D |
自定义多边形图形 | 可编程绘制任意形状(如血条、特效) |
Light2D + CanvasModulate |
2D 光照与全局色调 | 需启用 Rendering → Quality → 2D → Use Lighting |
交互与检测
| 节点 | 用途 | 典型场景 |
|---|---|---|
Area2D |
触发区域(非物理碰撞) | - 伤害区域(火焰)- 拾取范围(金币)- 进入/离开事件(area_entered) |
RayCast2D |
射线检测 | - 检测前方是否有墙- 实现“视线”或“攻击判定” |
CollisionShape2D |
必须作为子节点 | 为 CharacterBody2D / StaticBody2D / Area2D 提供碰撞形状(矩形、圆形、胶囊、多边形等) |
注意:
Area2D不会阻挡角色,只用于“感知”;CollisionShape2D才是物理碰撞的基础。
摄像机与视图
| 节点 | 用途 |
|---|---|
Camera2D |
控制玩家视角 |
ParallaxBackground + ParallaxLayer |
视差滚动背景 |
注意:
✅ 把
Camera2D作为角色的子节点,再启用 Current 属性即可自动跟随。
UI 与界面
虽然属于 2D,但 UI 使用 Control 节点体系:
| 节点 | 用途 |
|---|---|
Label |
显示文字 |
Button |
可点击按钮 |
TextureButton |
图片按钮 |
Panel / PanelContainer |
背景面板 |
VBoxContainer / HBoxContainer |
自动排版布局 |
注意:
💡 UI 节点通常放在
CanvasLayer下,避免被游戏摄像机影响。
实用工具节点
| 节点 | 用途 |
|---|---|
Timer |
延时或周期执行(如技能冷却) |
Tween |
补间动画(移动、淡入淡出等) |
AudioStreamPlayer2D |
2D 空间音效(随距离衰减) |
YSort |
自动按 Y 坐标排序子节点(解决角色穿插问题) |
推荐项目结构示例
1 | Main (Node2D) |
总结
| 类别 | 必学节点 |
|---|---|
| 角色 | CharacterBody2D + CollisionShape2D |
| 地面 | StaticBody2D + CollisionShape2D 或 TileMap |
| 动画 | AnimatedSprite2D |
| 触发 | Area2D + CollisionShape2D |
| 摄像机 | Camera2D |
| UI | Label, Button, TextureRect |