老实说,我不知道 Qt 是如何工作的。但是假设 Qt 能够渲染图像,您可以利用它以一种有点 hacky 的方式来完成它:
- 在沙盒编辑器中准备一个简单的材质(一个材质层,Illum 着色器,只需漫反射贴图 - 任意)
- 将 Qt UI 渲染到内存中的图像(本质上只是一个像素数组/流)
- 将该“图像”传递给 CryEngine
- 在 CryEngine 中找到您的材质,克隆它并将您的图像设置为漫反射贴图。
- 直接渲染到屏幕上
您甚至可以使用该方法模拟 Scaleform 的 3D 功能:
- 创建 EntityFlashTag 的副本 如果您现在想要一个 3D UI 元素,您可以:
- 新实体的生成和实例
- 设置 UI 材料(带有渲染的 Qt UI 的图像)并将其应用到您的实体实例
- 缩放和调整实体位置
您应该能够在 GameDll 中完成所有与 CryEngine 相关的工作——但遗憾的是,我现在不能给您代码片段(以后可能会这样做)。这种方法还有一个很大的缺点:您必须自己实现整个 UI 交互。
否则,如果您希望 Qt UI 真正位于 CryEngine 之上并拥有“完整”的 CryEngine 源代码,则可以将 CryEngine 托管在 Qt 应用程序中。对于这种方法,您必须创建一个 Qt 小部件作为 CryEngine 的容器并强制该小部件具有本机句柄(您可能希望查看以下链接:强制 QWidget Child 拥有自己的窗口句柄)。然后在初始化引擎时使用该句柄(您可能想查看 PC 启动器代码以及 GameDll 中与游戏启动相关的代码)。
可能还有更好的方法,通过在 CryEngine 中真正“托管”Qt,但我不知道如何做到这一点。