Server
- 一个引擎内部代码组织代码概念,主要用途是用来将引擎内部一些比较独立系统组织起来。
- 只是一个逻辑概念,代码上没有一个框架,都是每个Server按照自己的情况去创建。
- 嵌入到引擎也是通过Hardcode(例如在main.cpp初始化某些Server)
- 一般来说每个Server都是有自己一套线程运行,跟主逻辑线程主要依赖CommandQueue(引擎提供),主线程一般只在需要的跟Server做同步(例如物理、渲染)
- Server本身是一个Object,可以发送信号到场景对象。
Modules和GDExtensions
- 两者都是C++扩展引擎的方式,主要区别是Modules是以静态方式编译进引擎,GDExtensions是动态库方式。
- Modules功能更全,因为和引擎一起编译,可以访问所有的API。不过官方承诺如果发现GDExtensions实现不了的功能,可以提Ticket,尽量保证和Modules功能相近。
- GDExtensions编译更快,Modules修改需要重新编译整个引擎(但是我觉得只要依赖正确,基本多不了多少时间)
- GDExtensions由于是二进制,可以使用其他语言开发(社区有个Rust的)。大概只需要将引擎的API导出到Rust就可以(不过引擎API的二进制兼容性如何?)
- iOS不支持动态库加载,GDExtensions似乎无法使用,也没法直接将GDExtensions静态连接到ios。
参考: