欢迎光临散文网 会员登陆 & 注册

初探Godot的三种C++集成、运行调试以及Spine官方运行库的集成

2022-11-03 15:44 作者:enigmaxp  | 我要投稿

## 本文主要介绍环境搭建部分,代码部分不会过多涉及


## 前置需求


### 只想要用别人现成的C++模块,比如Spine运行库


- 能捣鼓明白Scons

- 会自己装各种C++编译环境

- 会看官方文档(官方文档大多都写明白了,只不过每个人环境不一样,说不定你就是那个踩坑的幸运儿)


### 想要自己Debug C++,自己写点C++代码


- 会装VS、或者VSCODE、或者其它IDE

- 会C++基础


## GDNative、C++module、GDExtension对比


### GDNative


- 简单

- 不用全编译

- 调试以attach进程的形式实现

- 受Godot框架限制较大,适合搞些计算密集型的任务或者大内存频繁操作?

- 编译到多个平台很麻烦(我至今不知道怎么编译到android平台上)


### C++module


- 麻烦

- 要godot源码全编译,由于有编译cache作用,一次编译后续速度会加快

- 通过visual studio调试,开发效率勉强也能接收

- 编译到多平台较为容易,只要按照官方文档编译模版文件就可以了


### GDExtension(Godot4)


- 和GDNative十分相似,有部分优化,但是目前尚处于实验阶段


## 试试GDNative


不需要godot源码,但是需要[godot-cpp](https://github.com/godotengine/godot-cpp/tree/godot-3.5-stable)和[godot-cpp-header](https://github.com/godotengine/godot-headers/tree/godot-3.5-stable),注意master分支已经是godot4的代码了,所以3.5还是要切对应的3.5分支


### 开发流程1-scons编译


godot-cpp-header放在godot-cpp文件夹里,然后整个godot-cpp拷贝过去,创建好SConstruct,可以用[官方模版](https://docs.godotengine.org/en/stable/tutorials/scripting/gdnative/gdnative_c_example.html#doc-gdnative-c-example)


把所有项目内容按照scons文件里的要求过一遍,目录该有的要有,文件夹对应好,跑一遍scons platform=windows搞定

具体开发可以参考[视频](https://www.youtube.com/watch?v=j0hMxMD9mII)


### 开发流程2-vs自己编译


参考[视频](https://www.youtube.com/watch?v=aPDO9nAP5oM)


不要求拷贝godot-cpp和godot-cpp-header,只需要配置的时候把路径设置好就可以了,免去了每次拷文件的烦恼


把godot的库直接手动加到vs里,参考步骤如图(图里的lib目录其实是godot-cpp的bin目录)


设置dll导出到自己的godot项目文件夹里,不用每次编译完手动拷贝了


直接生成项目,dll就到对应文件夹里了


### 集成流程


有了dll,在godot里创建一个资源gdnlib

配置好对应的dll,就可以新建一个gdns了

### 调试

全部搞好就可以执行了,通过附加到进程进行调试


## 试试C++ module

[官方文档](https://docs.godotengine.org/en/stable/development/cpp/custom_modules_in_cpp.html)


首先要scons编译一遍


通过`scons platform=windows vsproj=yes`生成vs解决方案,就可以直接用vs打开sln文件了


配置好调试的命令参数,就可以直接运行了,自动每次都会自动执行scons生成一个全新的godot


命令行参数官方文档也有说明,如果想要调试游戏某个场景,去掉-e参数,增加tscn路径即可


例如`--path "E:\workspace\godot\godot3_5_web\GodotProjectWithCppModule" "t2.tscn" --verbose`

参考[视频](https://www.youtube.com/watch?v=xo3z9IjGRSo)


这个好处就是可以直接调试游戏,不用attach进程调试了,但是缺点就是每次运行变慢了,如果cpp改动不大或者用的不深入应该问题不大


### spine运行库


[spine-godot](http://zh.esotericsoftware.com/spine-godot)


从github上clone下来spine-runtimes,由于官方提供的流程是会单独重新拉godot代码的,而且会把godot代码放在spine运行库的文件夹里


这里推一波我的做法:


将spine-runtimes里的spine-cpp拷贝到spine-godot里

将spine-runtimes里的spine-godot拷贝到你自己的godot源码同目录,注意godot源码的目录,名字要一模一样编译才能通过


在godot目录里使用scons命令但是增加一个`custom_modules="../spine_godot"`即可,这样就能实现和官网bat脚本一样的结果


以上操作是解构bat文件的结果,其实自己看一遍就明白了


最后编译出ide,就能执行spine-godot中的示例项目了


如果要编译到其他平台的导出模版,只要依样画葫芦加上`custom_modules="../spine_godot"`即可

## 试试GDExtension


官网提供了一个示例,我本地运行没问题,编译和集成步骤和gdnative差不多,但是据说代码写法上更接近c++ module,但是由于短期还没有迁移4.0打算,所以只是浅尝即止,没有深挖。


[官网](https://godotengine.org/article/introducing-gd-extensions)


[介绍](https://www.reddit.com/r/godot/comments/suvklu/a_few_questions_about_c_and_godot_4s_gdextension/)


## 总结


有了C++作为后备力量,特别是c++模块,弥补gdscript的内存、速度性能瓶颈,应该是非常棒的选择,引入spine的支持,对2d开发可以说更上一层楼。


目前也有goost、voxel等c++库可以作为学习参考



初探Godot的三种C++集成、运行调试以及Spine官方运行库的集成的评论 (共 条)

分享到微博请遵守国家法律