Godot 从小白到精通:轻量级游戏引擎与脚本开发全流程教学
Godot 是一款轻量级、跨平台、开源的 2D/3D 游戏引擎,采用 GDScript(类似 Python)进行开发。Godot 的一切都是节点(Node),每个场景由多个节点组成,可以嵌套、继承和复用。Godot 的“场景”是可重用的对象模板(类似 Unity 的 Prefab)。GDScript 是 Godot 专属语言,语法与 Python 类似。导入一张地图素材(如地砖),在 TileSe
一、认识 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
打开动画编辑器:
-
点击「新建动画」命名
move -
选择 Sprite2D 节点
-
点击「关键帧 +」录制位置变化
-
设置 0s 与 1s 两个不同位置
-
点击播放即可看到运动动画
可以在代码中触发动画:
$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 导出尤其强大,可直接运行在浏览器中。
十五、进阶与实战方向
-
信号与节点通信:深入掌握事件驱动架构。
-
TileMap 优化:构建完整 2D 地图系统。
-
对象池机制:提升性能,避免频繁实例化。
-
UI 动态布局:自适应多平台分辨率。
-
AI 路径寻路:使用 Navigation2D 系统。
-
Shader 特效:制作发光、波纹、水面动画。
-
多场景管理:模块化结构设计大型游戏。
-
GDScript 进阶:学习继承、信号、类、协程。
这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!
更多推荐

所有评论(0)