从技术上讲,选项 A可能是最快的,但它会带来一系列您需要手动处理的其他问题。如果您要更新文本(健康、弹药等),您将不得不提出一个文本渲染例程,至少可以说这些都不是微不足道的。如果您通过鼠标或键盘与 UI 进行交互,您将需要自己处理,并且您足够强大和有效地执行此操作以实际产生比本机浏览器小部件更好的体验的机会很小。重点是,要使速度更快一些,需要做很多工作。
在我看来,选项 B是可行的方法。浏览器非常擅长合成,即使因为它会产生性能影响,除非你正在做一个非常疯狂的详细 HUD,我猜想与你应用程序的其他部分(如 JS 逻辑)相比,这种影响可以忽略不计。另外,随着时间的推移,这条路线应该会“神奇地”变得更好,并且浏览器会变得更有效率。IMO 最大的缺点是,如果您使用一些最新最好的 CSS 效果来按照您想要的方式设置 HUD 样式,您可能会遇到一些渲染错误,但随着时间的推移,这种情况应该会消失。
据我所知,选项 C在单个画布中是不可能的。您可以在 3D 画布上叠加一个单独的 2D 画布并将 HUD 绘制到上面,但此时您继承了 A 和 B 的所有问题而没有任何好处。我看不出有什么好的理由推荐它。
我认为 WebGL 相对于许多原生 3D 平台的一大优势是它可以轻松访问地球上使用最广泛、最灵活的 UI 框架之一 (HTML)。忽视这一优势将是一项巨大的努力,几乎没有什么切实的好处。使用您可用的工具,不要因此而过多地担心丢失的毫秒数。我向您保证,您在开发游戏时将面临更大的问题,您的时间和精力会花在上面比尝试重新发明这个特定的轮子要好得多。