一、认识 Godot 引擎界面结构

Godot 是一款轻量级、跨平台、开源的 2D/3D 游戏引擎,采用 GDScript(类似 Python)进行开发。打开 Godot 后你会看到:

  • Scene(场景树):所有节点对象的层级结构。

  • Inspector(属性面板):显示节点属性。

  • FileSystem(文件系统):管理项目资源。

  • Viewport(视图窗口):展示游戏场景。

  • Script Editor(脚本编辑器):编写 GDScript 代码。

常用快捷键:


Ctrl + S # 保存场景 Ctrl + Shift + S # 另存为 F5 # 运行游戏 F6 # 运行当前场景 Ctrl + D # 复制节点 Ctrl + Z # 撤销

Godot 的一切都是节点(Node),每个场景由多个节点组成,可以嵌套、继承和复用。


二、创建第一个项目与场景

启动 Godot → New Project → 选择路径 → Create。

默认会创建一个空项目。
点击「+」添加节点:


Node2D # 2D 场景根节点

重命名为 Main

添加子节点:


Sprite2D Camera2D

导入一张图片资源,将其拖入 Sprite2D 的 Texture 属性。
点击右上角 Play Scene (F6) 即可预览效果。


三、GDScript 编程入门

GDScript 是 Godot 专属语言,语法与 Python 类似。

创建脚本:


右键节点 → Attach Script → 命名 player.gd

示例:


extends Sprite2D var speed = 200 func _process(delta): var move = Vector2.ZERO if Input.is_action_pressed("ui_right"): move.x += 1 if Input.is_action_pressed("ui_left"): move.x -= 1 if Input.is_action_pressed("ui_down"): move.y += 1 if Input.is_action_pressed("ui_up"): move.y -= 1 position += move.normalized() * speed * delta

运行后即可使用方向键移动角色。


四、输入系统配置

打开菜单:


Project → Project Settings → Input Map

添加自定义输入:


move_left, move_right, move_up, move_down

绑定按键(如 A、D、W、S),然后在代码中替换:


if Input.is_action_pressed("move_right"): move.x += 1


五、碰撞与物理系统

Godot 的物理系统由三个关键节点组成:

  • Area2D:检测进入、离开事件。

  • CollisionShape2D:定义碰撞范围。

  • RigidBody2D:带物理模拟的物体。

示例:创建一个可碰撞方块


Node2D ├── Sprite2D ├── CollisionShape2D

为 CollisionShape2D 添加形状:


Shape → RectangleShape2D

检测碰撞:


func _on_Area2D_body_entered(body): print("碰到:", body.name)


六、动画系统(AnimationPlayer)

Godot 的动画系统基于节点关键帧控制。

添加动画组件:


右键节点 → Add Child Node → AnimationPlayer

打开动画编辑器:

  1. 点击「新建动画」命名 move

  2. 选择 Sprite2D 节点

  3. 点击「关键帧 +」录制位置变化

  4. 设置 0s 与 1s 两个不同位置

  5. 点击播放即可看到运动动画

可以在代码中触发动画:


$AnimationPlayer.play("move")


七、UI 系统与交互设计

Godot 的 UI 基于 Control 节点系统
添加 UI 场景:


Control ├── Label ├── Button

设置锚点、对齐方式,让 UI 适配屏幕。
脚本控制按钮点击:


extends Button func _ready(): connect("pressed", Callable(self, "_on_pressed")) func _on_pressed(): print("按钮被点击!")

在复杂界面中可使用 VBoxContainer、HBoxContainer、GridContainer 自动布局。


八、场景与实例系统

Godot 的“场景”是可重用的对象模板(类似 Unity 的 Prefab)。

创建子弹场景:


Node2D ├── Sprite2D ├── Area2D ├── CollisionShape2D

保存为 bullet.tscn
在玩家脚本中实例化:


var bullet = preload("res://bullet.tscn").instantiate() get_tree().current_scene.add_child(bullet) bullet.position = position


九、信号(Signal)与事件系统

信号是 Godot 的事件机制。
可在 Inspector 面板中连接,也可在代码中定义:

定义信号:


signal hit(target) func _on_body_entered(body): emit_signal("hit", body)

监听信号:


func _ready(): $Enemy.connect("hit", Callable(self, "_on_enemy_hit")) func _on_enemy_hit(target): print("敌人受到碰撞:", target.name)


十、TileMap 与关卡制作

TileMap 用于快速搭建地形。
创建 TileSet:


右键 → New TileSet

导入一张地图素材(如地砖),在 TileSet 编辑器中划分网格。
然后:


添加节点 → TileMap → 指定 TileSet

即可直接“画地图”。


十一、音效与音乐系统

添加背景音乐:


右键 → Add Child Node → AudioStreamPlayer

属性:


Stream: 导入音频文件 (.wav/.ogg) Autoplay: true

播放控制:


$AudioStreamPlayer.play()

音量控制:


AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Master"), -10)


十二、2D 粒子与特效系统

添加粒子节点:


CPUParticles2D

属性设置:

  • Amount:粒子数量

  • Lifetime:粒子寿命

  • Gravity:重力方向

  • Texture:粒子纹理

  • Color Ramp:颜色渐变

可通过动画或脚本动态控制粒子效果。

参考案例:www.phvrq.cn


十三、场景切换与数据存储

切换场景:


get_tree().change_scene_to_file("res://level2.tscn")

保存玩家进度:


var save_data = {"score": 120, "level": 3} var file = FileAccess.open("user://save.dat", FileAccess.WRITE) file.store_var(save_data) file.close()

读取数据:


var file = FileAccess.open("user://save.dat", FileAccess.READ) var data = file.get_var() print(data)


十四、导出与发布项目

导出设置:


Project → Export Platform: Windows / Android / HTML5

配置图标、名称、分辨率等信息。
点击「Export Project」生成可执行文件(EXE / APK / Web)。

Godot 的 HTML5 导出尤其强大,可直接运行在浏览器中。


十五、进阶与实战方向

  1. 信号与节点通信:深入掌握事件驱动架构。

  2. TileMap 优化:构建完整 2D 地图系统。

  3. 对象池机制:提升性能,避免频繁实例化。

  4. UI 动态布局:自适应多平台分辨率。

  5. AI 路径寻路:使用 Navigation2D 系统。

  6. Shader 特效:制作发光、波纹、水面动画。

  7. 多场景管理:模块化结构设计大型游戏。

  8. GDScript 进阶:学习继承、信号、类、协程。

Logo

这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!

更多推荐