十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

GDevelop 扩展开发完整指南:3 个文件让游戏引擎多出你的新玩法

GDevelop 扩展开发完整指南:3 个文件让游戏引擎多出你的新玩法 GDevelop 扩展开发完整指南:3 个文件让游戏引擎多出你的新玩法【免费下载链接】GDevelop Open-source, cross-platform 2D/3D/multiplayer game engine designed for everyone.项目地址: https://gitcode.com/GitHub_Trending/gd/GDevelop用 GDevelop 做游戏的人,大概率都遇到过这种情况:事件系统里的动作不够用,想要一个每帧自动改某条变量或给对象挂个自定义逻辑的功能,翻遍官方扩展列表也没有现成的。这时两条路:要么硬凑事件拼出近似效果,要么自己动手写一个GDevelop 扩展——这个开源的跨平台 2D/3D 游戏引擎里,对象、行为、动作、条件全部由扩展提供,你写进仓库里的几段 TypeScript,就能变成编辑器里可勾选、可配置、所有项目都能复用的正式功能。好消息是:大多数扩展只需要 JavaScript/TypeScript,不需要碰 C。先想清楚:你的功能该不该做成扩展在动手之前,花一分钟确认功能形态,这决定了后面代码怎么写:挂到对象上、有属性面板的逻辑→ 做成行为(Behavior),比如自动巡逻血量管理场景级的通用工具函数→ 做成动作/条件/表达式,挂在事件面板里全新类型的游戏元素→ 做成对象(Object),连渲染器一起写仓库里 Extensions/ 目录下有 40 多个官方扩展,从平台跳跃到粒子系统一应俱全,写之前先翻一遍,既有避免重复造轮子,也是最好的学习材料。5 分钟搭好扩展开发环境只需要三样东西:Git、Node.js、一个顺手的代码编辑器。把 GDevelop 源码拉到本地并装依赖:git clone https://gitcode.com/GitHub_Trending/gd/GDevelop cd GDevelop/newIDE/app npm install然后按 newIDE/README.md 的方式把编辑器跑起来(开发版本会自带开发者控制台,后面排查问题全靠它)。跑起来之后,在开发者控制台里找到Loaded x JS extensions.这行日志——它出现,说明扩展加载管线是通的,你后面加的东西才有地方生效。一个扩展长什么样:两个文件各司其职打开最薄的官方样例 Extensions/ExampleJsExtension/,会发现结构极其规律:声明文件JsExtension.js—— 告诉 IDE这个扩展叫什么、有哪些属性、哪些动作、哪些行为,是编辑器界面的来源;运行时文件xxxruntimebehavior.ts/xxxtools.ts—— 真正在游戏引擎里跑的逻辑,用 TypeScript 写。注意JsExtension.js这个文件名是硬性规定,改个名字 GDevelop 就不会加载它。声明侧,样例的核心是一个链式调用的gd.PlatformExtension:module.exports { createExtension: function (_, gd) { const extension new gd.PlatformExtension(); extension .setExtensionInformation( MyFirstExtension, // 唯一 ID,项目里靠它引用 _(我的第一个扩展), _(一句简介), 你的名字, MIT ); // 之后在这里 addAction / addCondition / addBehavior ... return extension; } };_()是本地化包装,界面文案都走它;addBehavior时还要传入一个gd.BehaviorJsImplementation,实现initializeContent、updateProperty、getProperties三个方法——这就是编辑器里行为属性面板的数据来源,属性值会自动随项目 JSON 存取,你不用操心序列化。运行时侧,行为就是一个继承gdjs.RuntimeBehavior的类,样例文件 dummyruntimebehavior.ts 只有关键的骨架:export class MyRuntimeBehavior extends gdjs.RuntimeBehavior { constructor(instanceContainer, behaviorData, owner) { super(instanceContainer, behaviorData, owner); this._value behaviorData.property1; // 读声明侧写的属性 } doStepPreEvents(instanceContainer) { // 每帧、事件执行前跑:在这里写你的每帧逻辑 } doStepPostEvents(instanceContainer) { // 每帧、事件执行后跑 } } gdjs.registerBehavior( MyFirstExtension::MyBehavior, // 命名空间必须和声明 ID 对应 MyRuntimeBehavior );构造函数里拿到的behaviorData就是属性面板存下来的那份数据,this.owner是挂着这个行为的对象实例。想每帧做事就写进doStepPreEvents/doStepPostEvents,想做事件动作就把函数挂到xxxtools.ts里再在声明侧用setFunctionName指过去。这套机制的完整说明在 newIDE/README-extensions.md,引擎本体在 GDJS/Runtime/,API 文档也在仓库GDJS/docs/下有对应目录。GDevelop 扩展教程:2D 平台游戏里配置行为的属性面板让改动热加载进编辑器开发循环比想象中短,因为编辑器会自动监视Extensions/下的变更:改JsExtension.js(声明)→ 在开发者控制台按CtrlR(macOS 是 CmdR)重载编辑器改.ts运行时文件 → 重新点一次预览即可每次改动后瞄一眼控制台,应该能看到GDJS Runtime update之类的提示;没看到就是没导入如果自动导入被关了,可以手动执行newIDE/app/scripts/import-GDJS-Runtime.js把声明和运行时文件灌进编辑器。扩展不生效?按这个顺序排查⚠️ 新手最常卡住的地方,90% 是下面四种:控制台里有红色报错。文件命名错了(JsExtension.js大小写或位置不对)、TypeScript 语法错误,都会让加载静默失败——点进报错看堆栈是第一动作,不是最后动作。注册名和声明 ID 对不上。gdjs.registerBehavior(扩展ID::行为名, 类)里的前缀必须和setExtensionInformation第一个参数完全一致,错一个字符行为就消失,而且不报错。动作/条件的参数声明和函数签名不匹配。少声明一个参数不会崩,但会制造幽灵 bug,这是官方文档里明确点名要二次核对的地方。改了声明却只重新预览。声明文件改动必须重载整个编辑器,只重开预览是不生效的。另外,行为如果无法热应用新数据(重写了applyBehaviorOverriding并返回false),编辑器会禁用该行为的热重载,预览时看不到变化属于预期,不是坏了。跑通之后往哪走样例扩展里还有效果(Effect/像素滤镜)、自定义对象、扩展属性、npm 依赖声明等分支没展开,都藏在同一个JsExtension.js里,顺着注释读一遍就能学会对应的声明方式。再往上走,可以参考 Extensions/PlatformBehavior/ 这种生产级扩展,它带完整的测试目录,连行为参数如何影响跳跃曲线的图解都有;引擎侧的渲染、事件工具函数则可以在 Extensions/ExampleJsExtension/ 的dummyruntimeobject-pixi-renderer.ts、examplejsextensiontools.ts里找到最小可用写法。GDevelop 扩展开发成果:用引擎制作的游戏作品展示下一步就一件事:照 Extensions/ExampleJsExtension/ 的结构,在Extensions/下新建你自己的目录,把MyDummyExtension改名成你的扩展,让控制台里那句Loaded x JS extensions.的数字加一——这就是你的第一个扩展上线了。【免费下载链接】GDevelop Open-source, cross-platform 2D/3D/multiplayer game engine designed for everyone.项目地址: https://gitcode.com/GitHub_Trending/gd/GDevelop创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表