资讯详情

资讯详情

GDevelop 开源游戏引擎全解析:无代码 2D/3D/多人游戏开发、技术架构与源码级原理

GDevelop 开源游戏引擎全解析无代码 2D/3D/多人游戏开发、技术架构与源码级原理【免费下载链接】GDevelop Open-source, cross-platform 2D/3D/multiplayer game engine designed for everyone.项目地址: https://gitcode.com/GitHub_Trending/gd/GDevelopGDevelop 是一款全功能、无代码、开源的游戏开发软件可同时面向 iOS、Android、桌面端与 Web 构建 2D、3D 及多人游戏其核心是易学却强大的事件系统与模块化的行为Behavior体系并支持 AI 辅助创作。本文以仓库根目录 README.md 为主体结合 Core/GDevelop-Architecture-Overview.md 与各子模块源码系统讲解 GDevelop 的项目定位、快速入门路径、五层技术架构Core / GDJS / GDevelop.js / newIDE / Extensions、事件到代码的生成原理以及本地开发、构建与扩展开发的完整实战方案。GDevelop 编辑器编辑 3D 游戏关卡界面一、项目定位为每个人设计的跨平台游戏引擎根据仓库根 README.md 的描述GDevelop 的定位可归纳为四个关键词全功能full-featured对象、行为、事件、物理、特效、多人联机等能力一应俱全无代码no-code以易理解的事件系统替代传统编程普通创作者也能构建完整游戏开源open-source编辑器、游戏引擎与全部内置扩展均以 MIT 许可开放跨平台cross-platform一次创作可导出到移动端iOS/Android、桌面端与 Web并支持 2D、3D 与多人游戏。GDevelop 编辑器编辑 2D 游戏关卡界面值得一提的是项目在开发与运行时都引入了AI 辅助能力Create with AI that assists or builds alongside you既可作为创作助手也可与创作者并行完成构建任务。提示仓库顶部还展示了用 GDevelop 制作的游戏合集图newIDE/GDevelop games.png这些游戏可在 gd.games 游戏平台以及 Steam、App Store、Google Play、Itch.io、Newgrounds、CrazyGames、Poki 等渠道看到用于了解该引擎的实际产出形态。二、快速入门按角色选择行动路径README 用一张我想做什么的对照表给出了不同角色的入口目标行动 用 GDevelop 做游戏访问 GDevelop 官网下载应用⚙️ 创建/改进扩展阅读扩展创建文档支持无代码或写代码两种方式‍ 为编辑器或游戏引擎做贡献跟随 newIDE/README.md 创建或出售游戏模板向 Asset Store 提交免费示例或付费模板 分享或出售资源包向 Asset Store 提交免费或付费资源包 帮助翻译 GDevelop加入 Crowdin 翻译项目或翻译应用内教程 获取在线游戏服务或商业支持查看面向专业人士、团队或个人创作者的服务方案对于第一次参与贡献的开发者README 建议从以下入口入手good first issues列表标注了适合新手的 GitHub issuegood first contributions讨论区路线图Roadmap上标注为 not too hard的卡片。三、技术架构五大目录的分工与协作README 明确写道GDevelop 由编辑器editor、游戏引擎game engine、扩展生态ecosystem of extensions以及在线服务与商业支持组成。源码层面仓库被划分为五个核心目录这一结构在 Core/GDevelop-Architecture-Overview.md 中有更完整的阐述目录说明Core核心类库C描述游戏结构并提供实现 IDE 与操作 GDevelop 游戏所需的工具GDJS游戏引擎TypeScript 编写基于 PixiJS 与 Three.js 实现 2D/3D 渲染WebGL驱动所有 GDevelop 游戏GDevelop.js将Core、GDJS、Extensions绑定到 JavaScript含 WebAssembly供 IDE 使用newIDE游戏编辑器JavaScript 编写基于 React、Electron、PixiJS 与 Three.jsExtensions游戏引擎内置扩展提供对象、行为与新特性例如基于 WebAssembly 的物理引擎2D 的 Box2D、3D 的 Jolt Physics3.1 先厘清两个概念IDE 与 Runtime在深入代码前需要区分两个贯穿全仓库的概念详见架构概览文档IDE即集成开发环境也就是 GDevelop 编辑器本体。Core与GDJS子目录中名为IDE的文件夹存放的类与工具仅对编辑器有用并非描述游戏结构所必需Runtime指游戏运行时使用的类、工具与源码即引擎本身。GDJS/Runtime目录就是 GDevelop 的游戏引擎。以变量系统为例可以更直观地看到二者的差异编辑器侧的gd::VariableC 类位于 Core/GDCore/Project 体系下负责描述游戏结构在编辑器中展示、随项目文件持久化保存引擎侧的gdjs.VariableTypeScript 类位于 GDJS/Runtime是游戏运行期间实际使用的对象。架构文档特别指出编辑器侧的gd::Variable完全不知道引擎侧gdjs.Variable的存在反之引擎侧也几乎不了解编辑器侧仅了解其 JSON 序列化格式以加载游戏默认变量。这种双向解耦是整个架构分层的关键设计。3.2 Core描述游戏结构的 C 核心库Core/GDCore主要包含两类内容游戏结构描述使用 C 类描述Project游戏项目的完整结构——事件、场景、对象、行为等集中在 Core/GDCore/Project 目录。从该目录的文件清单如Behavior.cpp、CustomObjectConfiguration.cpp、EventsBasedBehavior.cpp、EffectsContainer.cpp等可以看出对象属性、行为配置、效果容器、事件函数等都以结构化的 C 类承载这也是项目文件能够精确序列化/反序列化的基础结构操作工具Core/GDCore/IDE目录提供对游戏结构进行批量操作的能力。例如 WholeProjectRefactorer.cpp 是功能强大的重构工具可用于重命名游戏中的所有对象、在对象被删除后更新事件引用、执行跨项目Project-wide重构该目录还包含项目资源操作工具与事件内搜索工具。3.3 GDJSTypeScript 游戏引擎 C 平台层README 将GDJS描述为用 TypeScript 编写、使用 PixiJS 与 Three.js 渲染WebGL的游戏引擎。结合 GDJS/README.md 可以看到它实际由两部分构成GDJS Runtime游戏引擎位于GDJS/Runtime目录全部用 TypeScript 编写是游戏中真正执行的部分。从 runtimegame.ts 的源码可以看到引擎的顶层设计gdjs.RuntimeGame负责管理项目数据、全局资源与压缩方式探测如CompressionStream的 gzip/deflate 支持检测并持有热重载所需的脚本文件哈希信息GDJS Platform平台层位于GDJS/GDJS目录是 C 编写的IDE 侧代码负责向编辑器描述导出流程GDJS/GDJS/IDE、内置扩展GDJS/GDJS/Extensions/Builtin以及从事件生成 JS 代码GDJS/GDJS/Events/CodeGeneration等能力。3.3.1 构建 GDJS Runtime 的命令与选项根据 GDJS/README.md构建游戏引擎的命令如下在GDJS目录下执行npm install安装依赖后运行# 标准生产构建默认启用压缩/混淆 npm run build # 调试构建不压缩便于调试 npm run build -- --debug # 调试构建 自定义输出目录 npm run build -- --debug --out./debug-build类型检查与测试npm install npm run check-types # TypeScript 类型检查 cd GDJS/tests npm install npm test # 运行引擎测试Karma3.4 GDevelop.js把 C 核心桥接到 JavaScriptGDevelop.js的价值在于让 C 编写的 Core 与平台层能在浏览器或 Node.js 中运行——这正是编辑器可以完全用 JavaScript 编写并跑在浏览器里的原因详见 GDevelop.js/README.md。编译工具链使用Emscripten它不是生成原生二进制而是生成能在浏览器中运行的文件即 JavaScript WebAssembly最关键的文件是 GDevelop.js/Bindings/Bindings.idl它声明了所有需要暴露给 JavaScript 的 C 类。约 90% 的场景下读写某个类只需修改这个 IDL 文件再由 Emscripten WebIDL Binder 自动生成glue.cpp与glue.js构建时由 CMake 决定编译哪些 C 源文件见 GDevelop.js/CMakeLists.txt依赖的 C 头文件统一在Bindings/Wrapper.cpp中导入。3.4.1 从源码构建 GDevelop.js需要修改 C 时一般情况下编辑器的npm start会自动下载预编译的 libGD.js无需手动构建 GDevelop.js。仅当你修改了 C 扩展或核心类时才需要走以下流程。安装前置工具CMake 3.17Linux/macOS 下 3.5 即可、Node.js、Python安装并激活 Emscripten3.1.21git clone https://github.com/emscripten-core/emsdk/ cd emsdk git pull ./emsdk install 3.1.21 ./emsdk activate 3.1.21 # Windows 下还需pip install setuptools每次构建前重新加载 emsdk 环境Linux/macOS 执行source ./emsdk_env.shWindows PowerShell 执行./emsdk_env.ps1在GDevelop.js目录构建npm install # 仅首次 npm run build # 每次 C 变更后调试变体便于排查栈与内存问题npm run build -- --variantdebug # 带调试信息 npm run build -- --variantdebug-assertions # 断言 SAFE_HEAP1定位内存 bug npm run build -- --variantdebug-sanitizers # 内存消毒器运行极慢3.5 newIDE基于 React Electron 的编辑器newIDE是 GDevelop 5 编辑器本体技术栈为React、Material-UI、Pixi.js、Three.js 与 Electron桌面壳。从 newIDE/app/package.json 的依赖清单可以验证包含material-ui/core界面组件库、react-scripts构建脚手架、storybook/*UI 组件开发环境、flow-bin类型检查以及typescript等覆盖了从界面开发到类型安全再到组件测试的完整工程化链路。3.5.1 本地安装与启动git clone https://github.com/4ian/GDevelop.git cd GDevelop/newIDE/app npm install # 或 yarn npm start # 或 yarn start在浏览器打开编辑器npm start会复制图片资源、GDJS Runtime 与扩展到资源目录并自动下载 libGD.js若想使用自己构建的 GDevelop.js例如修改了原生扩展可按上文方式自行构建后启动。Linux 常见问题若报错Error: watch GD/newIDE/app/some/file ENOSPC说明文件监听句柄耗尽按系统 inotify 上限调整方案处理即可。3.5.2 桌面端Electron开发开发桌面应用时必须先在app目录保持npm start运行开发模式下即便是桌面应用也由本地服务器提供页面再另开终端启动 Electron 壳cd newIDE/app npm start # 终端一保持运行 cd newIDE/electron-app # 终端二 npm install # 或 yarn npm run start # 或 yarn start3.5.3 质量保障命令与组件开发cd newIDE/app npm run test # 单元测试 npm run flow # Flow 类型检查 npm run format # 代码自动格式化 npm run storybook # Storybook 组件游乐场便于 UI 组件快速开发与测试3.5.4 可移植构建与 CLI 无头导出CI 场景newIDE/README.md还提供了一种构建便携包的方式生成无需安装、无签名、可自解压的 zip供 CI 或无头环境执行命令行导出cd newIDE/electron-app npm install # Linux / macOS GD_PORTABLE_BUILDtrue npm run build -- --publish never # Windows (PowerShell) $Env:GD_PORTABLE_BUILDtrue; npm run build -- --publish never解压后即可用 CLI 无头执行导出命令# Linux需安装依赖sudo apt install -y libnss3 libasound2t64 ./gdevelop --no-sandbox --disable-update-check \ --run-command EXPORT_HTML5_EXTERNAL /path/to/game.json # 导入一个或多个扩展并保存项目--cmd-args 可重复 ./gdevelop --no-sandbox --disable-update-check \ --run-command IMPORT_EXTENSION_AND_SAVE /path/to/game.json \ --cmd-args /path/to/FirstExtension.json --cmd-args /path/to/SecondExtension.json额外的可用参数包括--keep-open命令执行后不退出、--dev-tools打开开发者工具、--block-on-diagnostic-errors/--no-block-on-diagnostic-errors项目存在诊断错误时是否让导出失败。若同一项目已在运行的编辑器中打开命令会在该窗口执行fire-and-forget 方式CLI 不等待真实结果否则在无头模式下执行并以真实退出码结束适合 CI。Windows 下使用 NSIS 安装器时安装目录会自动加入用户PATH可直接运行GDevelop --run-command ...。四、事件系统与代码生成原理架构概览文档对事件给出了精确定义默认的事件gd::BaseEvent基本是空的在传统编程语言中可类比为一个作用域或代码块如{ some code here }内置事件类型定义于 Core/GDCore/Events/Builtin其中StandardEvent包含条件conditions与动作actions二者都是一组gd::Instruction一条gd::Instruction本质上是一个类型动作/条件的名字 若干参数可以理解为编程语言中的一次函数调用而条件是一种特殊函数——返回 true/false并可能用于对后续条件与动作所拾取picked的对象集合做过滤。为什么游戏中看不到运行时事件架构文档给出了明确答案它们在导出时被翻译transpile/生成为真正的编程语言代码这个过程称为 Code Generation代码生成对应 TypeScript 引擎的实现位于 GDJS/GDJS/Events/CodeGeneration。也就是说你在编辑器中编排的事件最终会被编译成游戏引擎中实际执行的 JS/TS 代码——这也是无代码创作背后的工程实现核心。五、扩展Extensions引擎的插件化体系GDevelop 的架构哲学是让引擎保持精简几乎所有对象、行为、特效、动作、条件与表达式都来自扩展。README 将扩展分为三处架构文档中有详细解释位置作用Core/GDCore/Extensions内置builtin扩展的声明任何游戏都必然包含相当于标准库GDJS/GDJS/Extensions复用上述声明并追加自身声明主要指定每个动作/条件/表达式要调用的函数名TypeScript 或 CExtensions非必需的模组/插件独立工作不属于 GDCore 核心每个扩展通常由两部分组成详见 newIDE/README-extensions.md声明文件JsExtension.js面向 IDE 的扩展声明扩展信息、动作/条件/表达式/对象/行为/属性/依赖等实现文件Runtime 侧TypeScript如extensionnametools.ts通用函数、objectnameruntimeobject.ts对象、objectnameruntimebehavior.ts行为。可参考官方示例扩展 Extensions/ExampleJsExtension 下的dummyruntimeobject.ts、dummyruntimebehavior.ts与examplejsextensiontools.ts。5.1 扩展开发的关键 API 速览声明扩展信息extension.setExtensionInformation(...)声明动作/条件/表达式addAction、addCondition、addExpression、addStrExpression用addParameter(...)链式声明参数再用getCodeExtraInformation()配合setFunctionName/setIncludeFile指定要调用的函数与包含文件异步动作使用setAsyncFunctionName可返回gdjs.PromiseTask(yourPromise)声明对象extension.addObject(...)配合gd.ObjectJsImplementation()实现属性读写声明行为extension.addBehavior(...)配合gd.BehaviorJsImplementation()需要共享数据时实现gd.BehaviorSharedDataJsImplementation()声明扩展属性全局配置值registerProperty(...)运行时通过runtimeGame.getExtensionProperty(ExtensionName, PropertyName)读取属性不存在时返回 null声明外部依赖addDependency()支持 npm 包与 Cordova 插件可附加插件变量如 AdMob 的ADMOB_APP_ID声明 PixiJS 渲染器实现registerInstanceRenderers让对象实例在场景编辑器中正确渲染。5.2 从零开始一个新扩展在Extensions目录下以唯一且有描述性的名字创建文件夹在其中创建JsExtension.js复制一个现有扩展的声明文件作为起点修改setExtensionInformation第一个参数为扩展内部名建议与文件夹同名创建yourextensionnametools.ts等运行时文件声明动作/条件/表达式时用setIncludeFile指定该文件注意路径从仓库根目录写起扩展名用 .ts例如.setIncludeFile(Extensions/FacebookInstantGames/facebookinstantgamestools.ts)运行node import-GDJS-Runtime.js导入声明与运行时然后按需重载编辑器CtrlR / CmdR验证修改运行时文件后重新启动游戏预览并检查开发者控制台。控制台出现Loaded x JS extensions.说明扩展已加载GDJS Runtime update说明改动已自动导入。部分扩展仍以 C 声明JsExtension.cpp/Extension.cpp这通常是为了兼容 GDevelop 4修改它们需要安装并构建 GDevelop.js见上文 3.4.1。六、仓库配套资产与贡献指南架构总览想深入理解目录分层、事件模型与 GDevelop.js 桥接推荐精读 Core/GDevelop-Architecture-Overview.md本文第三节的大部分概念均出自该文档IDE 开发与贡献完整的安装、启动、测试、主题newIDE/README-themes.md、扩展newIDE/README-extensions.md说明见 newIDE/README.md引擎与平台层见 GDJS/README.md 与 Core/README.md快速克隆与构建脚本仓库提供 gitCloneAndBuildGD.bat 一键克隆、构建并运行 IDE 的脚本翻译协作通过 Crowdin 上的 GDevelop 项目贡献翻译路线图与讨论功能建议请前往路线图Trello与 GitHub Discussions技术问题与 bug 反馈走 GitHub Issues首次贡献建议从 good first issues 开始。七、许可证与导出版权说明README 的 License 一节给出了明确的许可边界MIT 许可Core核心库、GDJS原生与 HTML5 游戏引擎、newIDE编辑器以及Extensions全部扩展均采用 MIT 许可专有资产GDevelop 名称与 logo 为 Florian Rival 的专有财产导出游戏的自由度GDevelop 导出的游戏基于 MIT 许可的游戏引擎见Core与GDJS目录因此你导出的游戏可以自由分发、出售或做任何事且没有义务开源你的游戏。这也是该引擎面向所有人理念在商业层面的落地创作者产出归自己所有引擎与编辑器则保持开源共建。结语从仓库根 README.md 出发可以看到GDevelop 不是单一体量的一个大编辑器而是一套精心分层、C 与 TypeScript 协同、通过 WebAssembly 桥接、以扩展为插件化边界的完整生态Core描述游戏结构GDJS提供运行引擎与导出平台GDevelop.js打通浏览器与原生之间的鸿沟newIDE承载 React 编辑器体验Extensions让能力无限延伸。无论你是想用它直接创作游戏、为引擎贡献代码、还是开发自己的扩展理解这套架构都能让你的上手与协作事半功倍。【免费下载链接】GDevelop Open-source, cross-platform 2D/3D/multiplayer game engine designed for everyone.项目地址: https://gitcode.com/GitHub_Trending/gd/GDevelop创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →