开发者生态
morning
在 Godot 中使用任何 C++ 库
摘要
Godot has become one of the most popular game engines of the last few years. It is free, open source under the MIT license, and small enough to download and start using in minutes. Most Godot games ar...
the
Godot
and
engine
has
library
can
you
for
game
2026-09-29
1 阅读
约8分钟阅读
czoido
字号:
Godot 已成为过去几年最流行的游戏引擎之一。它是免费的,在麻省理工学院许可证下开源,并且足够小,可以在几分钟内下载并开始使用。大多数 Godot 游戏都是用 GDScript 编写的,GDScript 是引擎自己的脚本语言。但迟早,许多项目需要一些已经作为 C 或 C++ 库存在的东西:模拟库、数据库、网络协议、机器学习运行时。 GDScript 无法调用本机代码,但 Godot 可以通过 GDExtension 加载它,而 godot-cpp (官方 C++ 绑定)可让您将该代码公开为常规引擎类。编写 C++ 代码是比较容易的部分。困难的部分是构建:godot-cpp 必须与您的 Godot 版本相匹配,并且您添加的每个库都必须针对您发布到的每个平台进行编译。在这篇文章中,我们将简要介绍 Godot,解释 C++ 扩展的工作原理,并展示如何使用 Conan 和 godot-cpp 10 将 C++ 库引入 Godot 游戏(现已在 ConanCenter 中提供)。作为示例,我们将使用 flecs(一个实体组件系统库)来模拟 Godot 场景内的 100,000 个粒子。下载视频 Godot 场景中用 flecs 模拟的 100,000 个粒子逃离鼠标光标 Godot 快速简介 Godot 是用于 2D 和 3D 游戏的通用引擎。 Godot 项目中的所有内容都是基于两个概念构建的: 节点是基本构建块。每个节点都有一个类型( Sprite2D 、 Camera3D 、 AudioStreamPlayer 、 Timer …)、一组可以在 Inspector 中编辑的属性,以及引擎在游戏循环期间调用的回调,例如 _ready() 或 _process() 。场景是作为 .tscn 文件保存到磁盘的节点树。场景可以是一个角色、一个菜单或整个关卡,并且场景可以在其他场景中实例化。通常通过将脚本附加到节点来添加行为。 GDScript 是一种为引擎设计的类似 Python 的语言,它非常适合游戏逻辑,因为更改会立即显示,无需编译步骤。 Godot 对于 C++ 开发人员来说有趣的是,引擎本身是用 C++ 编写的,并且它可以加载用 C++ 编写的扩展而无需重新编译。来自这些扩展之一的类将成为常规引擎类:它显示在内置节点旁边的编辑器中,其属性位于检查器中,并且 GDScript 可以像任何其他节点一样使用它。下一节将解释这些扩展的工作原理。使用 C++ 扩展 Godot 有两种方法可以将 C++ 代码添加到 Godot: 引擎模块被编译到引擎本身中。他们可以完全访问内部结构,但您需要构建并发布您自己的 Godot 副本,包括每个平台的编辑器和导出模板。 GDExtension 在运行时将共享库(网络上的 .dll 、 .so 、 .dylib 或 .wasm )加载到官方的、未经修改的 Godot 构建中。引擎通过稳定的 C 接口与库对话。 GDExtension 是大多数项目的推荐方法,也是当今许多流行插件的分发方式。由于直接使用 C 接口很冗长,Godot 团队维护了 godot-cpp,这是一个 C++ 库,它使用与引擎内部使用的 API 非常接近的 API 对其进行包装。它为每个引擎类提供一个 C++ 类,例如 Node2D 、 Sprite2D 或 Input 。您自己的类是从这些类派生的常规 C++ 代码。用 godot-cpp 编写的节点如下所示: #include namespace godot { class MyNode : public Node2D { GDCLASS ( MyNode , Node2D ) protected: static void _bind_methods () {} public: void _process ( double p_delta ) override { // 每帧运行 } }; } // 命名空间 godot 从版本 10.0 开始,单个 godot-cpp 版本适用于 4.3 及之后的任何 Godot 版本。您可以使用 api_version 构建选项选择一个,godot-cpp 会根据该版本的 API 生成其 C++ 类。为 Godot 4.3 构建的扩展也适用于较新的版本,但不适用于较旧的版本,因此您通常选择要支持的最旧的 Godot 版本。在构建任何东西之前,您还需要了解一个概念。 godot-cpp 是针对三个目标之一进行编译的,以加载库的 Godot 构建命名: template_debug :默认值。通过 DEBUG_ENABLED 定义启用调试检查。该库由编辑器和调试导出加载。 template_release :用于发布导出,删除了调试检查。 editor :适用于仅由编辑器加载的库。 Godot 加载哪个库是在运行时由一个小的 .gdextension 文件决定的。它将功能标签映射到库路径。 debug 标记与编辑器和调试导出匹配,release 标记与发布导出匹配: [configuration] entry_symbol = "gdexample_library_init" Compatibility_minimum = "4.7" [libraries] macos.debug = "res://bin/libgdexample.template_debug.dylib" macos.release = "res://bin/libgdexample.template_release.dylib" linux.debug = “res://bin/libgdexample.template_debug.so”linux.release =“res://bin/libgdexample.templa
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱