查看: 785|回复: 5

[讨论] 【开发笔记】Godot 4 GDExtension (C++)

[复制链接]

56

主题

408

回帖

8

精华

版主

☯ 博 丽 不 是 灵 梦 ☯

经验
6110
硬币
1029 枚

赞助用户永吧十五周年建吧日纪念勋章永吧十五周年倒计时海报勋章

发表于 2023-10-9 19:24:25 | 显示全部楼层 |阅读模式
本帖最后由 囿里有条小咸鱼 于 2023-10-12 19:13 编辑

嗯,这个帖子就是用来分享自己开发GDExtension的,随缘更新。
(P.S. 我真的只会一点点点C++ QwQ)

附赠两个我已经制作好的GDExtension:

数学库Mathorm:点我传送
实体节点EntityBody2D:点我传送

安装方法详见这些链接的github readme说明(有中文版)


这些插件可以直接用于扩展使用GDScript开发游戏的体验,也充分利用C++的性能优势来弥补因使用GDScript而造成的高性能消耗的问题。


>❀ To the Best You ❀<

56

主题

408

回帖

8

精华

版主

☯ 博 丽 不 是 灵 梦 ☯

经验
6110
硬币
1029 枚

赞助用户永吧十五周年建吧日纪念勋章永吧十五周年倒计时海报勋章

 楼主| 发表于 2023-10-9 19:38:53 | 显示全部楼层
开发的时候才注意到的几个问题:

  • 大部分内置类型都是以结构体的形式出现的,如Vector2。对于在函数里设置形参需要使用结构体的情况,要使用引用作为形参而非普通变量(拷贝),因为他们大多数情况下都不可能是空值
  • 但是,对于对象这种有可能没有指向【也就是null】的情况,那就不一样了,因此,如果一个函数的形参含有对象时,应使用指针而非引用,因为引用是不允许引用空对象的。
  • GDExtension C++里无法直接访问某个Godot类的属性,必须通过其setter和getter来访问。
  • 记得#include
  • GDExtension目前貌似无法做到自动检测该GDE的依赖GDE是否存在,而且在编译时还必须得把一个依赖库包进本GDE库里才行(也就是假依赖)。真心希望godot能加入真GDE依赖吧……

>❀ To the Best You ❀<

56

主题

408

回帖

8

精华

版主

☯ 博 丽 不 是 灵 梦 ☯

经验
6110
硬币
1029 枚

赞助用户永吧十五周年建吧日纪念勋章永吧十五周年倒计时海报勋章

 楼主| 发表于 2023-10-10 10:25:16 | 显示全部楼层
GDExtension的setter和getter默认是自带@tool功能的,因此会在检查器里实时发生变化。每隔一段时间都会通过getter来获取数值
昨天晚上发现EntityBody2D的motion的setter有重大bug,现在正在修复
>❀ To the Best You ❀<

56

主题

408

回帖

8

精华

版主

☯ 博 丽 不 是 灵 梦 ☯

经验
6110
硬币
1029 枚

赞助用户永吧十五周年建吧日纪念勋章永吧十五周年倒计时海报勋章

 楼主| 发表于 2023-10-10 22:12:49 | 显示全部楼层
囿里有条小咸鱼 发表于 2023-10-10 10:25
GDExtension的setter和getter默认是自带@tool功能的,因此会在检查器里实时发生变化。每隔一段时间都会通过 ...

这个问题被我用了个比较别扭的方式修掉了,同时还支持在属性里直接修改velocity,非常nice
>❀ To the Best You ❀<

56

主题

408

回帖

8

精华

版主

☯ 博 丽 不 是 灵 梦 ☯

经验
6110
硬币
1029 枚

赞助用户永吧十五周年建吧日纪念勋章永吧十五周年倒计时海报勋章

 楼主| 发表于 2023-11-15 21:35:07 | 显示全部楼层
1L中实体节点插件已更新2.0版本,附加中文doc,详情见1l链接
>❀ To the Best You ❀<

56

主题

408

回帖

8

精华

版主

☯ 博 丽 不 是 灵 梦 ☯

经验
6110
硬币
1029 枚

赞助用户永吧十五周年建吧日纪念勋章永吧十五周年倒计时海报勋章

 楼主| 发表于 2024-1-4 19:02:17 | 显示全部楼层
EntityBody2D 3.0已上线!
>❀ To the Best You ❀<
您需要登录后才可以回帖 登录 | 创建账户

本版积分规则