强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

Godot 3 GDScript 教程 / Godot 3 简介与安装

Godot 3 简介与安装

Godot 引擎简介

Godot 是一款完全免费、开源的游戏引擎,采用 MIT 许可证发布。开发者可以自由地使用、修改和分发,无需支付任何版税。

Godot 3 历史与版本

版本发布时间关键特性
Godot 1.02014 年 12 月首个公开版本
Godot 2.02016 年 2 月场景系统改进、新编辑器 UI
Godot 2.12016 年 7 月Asset Library、调试器增强
Godot 3.02018 年 1 月PBR 渲染、GDScript 大改、物理引擎重写
Godot 3.12019 年 3 月类型化 GDScript、Tween 节点
Godot 3.22020 年 1 月稳定性提升、GDNative 改进
Godot 3.52022 年 8 月物理插值、NavigationServer
Godot 3.62024 年 6 月3.x 最终维护版本

Godot 3 核心特点

  1. 轻量级:编辑器仅约 60MB,无需安装
  2. 场景驱动:一切皆节点(Node),场景可自由组合
  3. 内置脚本语言 GDScript:类 Python 语法,专为游戏设计
  4. 2D 与 3D 独立管线:2D 引擎原生支持,非 3D 投影
  5. 跨平台导出:支持 Windows、macOS、Linux、Android、iOS、Web、主机

Godot vs Unity vs Unreal 对比

特性Godot 3UnityUnreal Engine
授权方式MIT(完全免费)免费至收入门槛免费至收入门槛
脚本语言GDScript、C#C#C++、Blueprints
编辑器大小~60MB~3GB+~15GB+
2D 支持原生独立 2D3D 投影不擅长 2D
学习曲线🟢 低🟡 中🔴 高
社区规模🟡 中等🟢 大🟢 大
主机支持需第三方原生原生
最适合独立游戏、2D 游戏、原型中小型商业项目3A 级大作

⚠️ 注意:Godot 3 的 C# 支持需要 Mono 版本,标准版仅支持 GDScript。

下载与安装

方法一:官网下载(推荐)

  1. 访问 Godot 官网下载页
  2. 选择 Godot 3.6(标准版或 Mono 版)
  3. 下载对应平台的压缩包

方法二:Steam 安装

在 Steam 搜索 “Godot Engine”,选择 3.x 版本安装。

方法三:包管理器安装

# Linux (Flatpak)
flatpak install flathub org.godotengine.Godot3

# macOS (Homebrew)
brew install --cask godot

# Windows (Scoop)
scoop install godot

安装验证

解压后直接运行可执行文件,无需安装步骤:

# Linux
chmod +x Godot_v3.6-stable_linux.x86_64
./Godot_v3.6-stable_linux.x86_64

💡 提示:Godot 是便携式程序,所有配置保存在 ~/.config/godot/(Linux)或 %APPDATA%\Godot\(Windows)。

项目创建与目录结构

创建新项目

  1. 启动 Godot,点击 “新建项目”
  2. 输入项目名称,如 MyFirstGame
  3. 选择渲染器:GLES3(高质量)或 GLES2(兼容性好)
  4. 选择项目路径并点击 “创建并编辑”

标准项目目录结构

MyFirstGame/
├── .godot/              # 引擎内部缓存(不要手动修改)
├── export/              # 导出输出目录
├── scenes/              # 场景文件 (.tscn)
├── scripts/             # GDScript 脚本 (.gd)
├── assets/
│   ├── sprites/         # 图片资源
│   ├── audio/           # 音频资源
│   └── fonts/           # 字体文件
├── project.godot        # 项目配置文件
└── default_env.tres     # 默认环境资源

💡 提示:Godot 不强制目录结构,但良好的组织有助于项目管理。

编辑器布局

Godot 编辑器由以下核心面板组成:

面板位置功能
Scene左上场景树,管理当前场景的节点层次
Inspector右侧查看和编辑选中节点的属性
FileSystem左下项目文件浏览器
Output底部输出日志、错误信息
Toolbar顶部运行、停止、调试工具
Viewport中央场景可视化编辑区

自定义布局

可以拖拽面板标签来重新排列布局,通过 Editor → Editor Settings → Layouts 保存。

运行第一个场景

创建一个简单的 2D 场景

  1. 点击 Scene 面板的 “2D Scene” 按钮
  2. 默认创建一个 Node2D 根节点
  3. 右键根节点 → Add Child Node → 选择 Sprite
  4. 在 Inspector 中为 Sprite 的 Texture 属性拖入一张图片
  5. F5 运行场景

为根节点添加一个脚本,实现简单的旋转:

extends Node2D

# 旋转速度(弧度/秒)
var rotation_speed: float = 2.0

func _ready() -> void:
    print("场景已加载!")

func _process(delta: float) -> void:
    # 每帧旋转 Sprite
    $Sprite.rotation += rotation_speed * delta

F5 运行后,你会看到 Sprite 持续旋转。

导出第一个游戏

设置导出模板

  1. 菜单:Editor → Manage Export Templates
  2. 下载对应平台的导出模板

配置导出预设

  1. 菜单:Project → Export
  2. 点击 “Add…” 选择目标平台(如 Windows Desktop)
  3. 配置导出选项

执行导出

# 命令行导出(CI/CD 友好)
godot --export "Windows Desktop" ./export/my_game.exe
godot --export "Linux/X11" ./export/my_game.x86_64
godot --export "HTML5" ./export/my_game.html

⚠️ 注意:导出前必须先下载对应平台的 Export Templates。

GDScript vs C# 选择

对比项GDScriptC#
语法类 Python类 Java/C#
类型系统可选类型注解强类型
运行速度🟡 中等🟢 较快
学习曲线🟢 简单🟡 中等
IDE 支持内置编辑器VS Code / Rider
适用场景快速原型、中小项目大型项目、性能敏感
Godot 3 支持✅ 标准版⚠️ 仅 Mono 版

GDScript 示例

extends Node

func greet(name: String) -> String:
    return "Hello, " + name + "!"

func _ready() -> void:
    var message: String = greet("Godot")
    print(message)  # 输出: Hello, Godot!

等价的 C# 示例

using Godot;

public class Main : Node
{
    public string Greet(string name)
    {
        return "Hello, " + name + "!";
    }

    public override void _Ready()
    {
        string message = Greet("Godot");
        GD.Print(message);
    }
}

💡 提示:初学者推荐从 GDScript 入门,待项目规模增大后再考虑 C#。

游戏开发场景

场景:创建一个简单的主菜单

一个游戏主菜单通常包含标题、“开始游戏"按钮和"退出"按钮。在 Godot 中,我们可以用 Control 节点快速搭建。

extends Control

func _ready() -> void:
    # 连接按钮信号
    $StartButton.connect("pressed", self, "_on_start_pressed")
    $QuitButton.connect("pressed", self, "_on_quit_pressed")

func _on_start_pressed() -> void:
    get_tree().change_scene("res://scenes/Game.tscn")

func _on_quit_pressed() -> void:
    get_tree().quit()

扩展阅读