IT培训-高端面授IT培训机构
云和教育:云和数据集团高端IT职业教育品牌
  • 国家级
    全民数字素养与技能培训基地
  • 河南省
    第一批产教融合型企业建设培育单位
  • 郑州市
    数字技能人才(码农)培养评价联盟

【技术分享】Unity网页平台发布的未来

  • 发布时间:
    2014-12-18
  • 版权所有:
    云和教育
  • 分享:

数周前在 GDC,我们宣布 Unity 5 支持 WebGL 发布。现在,我想与你们分享相关详细信息以及用户可以期待从中获得什么。

背景

WebGL 是内置到浏览器的 3D 图形库,可在无需任何插件的情况下,使 JavaScript 程序在支持的浏览器内进行 3D 渲染。对我们而言,这看似非常适合在 Web 上运行 Unity 内容,因为它将带给终端用户最无障碍的体验:浏览器会提供立即可用的一切需求,而且无需用户安装任何插件,一切都会正常运行。

但是,我们起初对于这在技术上是否可行存有疑虑,因为 WebGL 是 JavaScript API,这意味着我们所有的代码(我们的 Unity 运行时代码和您的游戏代码)均需在 JavaScript 中运行。但同时,我们认为这项技术太酷了,我们必须进行尝试。因此两年前我们在哥本哈根的 HackWeek 开始对它进行试验。此外,那时我们还与 Mozilla 进行了沟通。Mozilla 非常乐意帮助我们证明这项技术是可行的,因此他们派遣了一些工程师到哥本哈根与我们合作。

我们用更多几个 HackWeek 进行反复试验,并在浏览器方面进行一些开发,直到我们意识到可开发出实际可行的产品,这时我们开始进行真正的工作。

为了让您对现状有一定的了解,在此提供导出到 WebGL 的 Unity 播放器,带有当前的 Unity 5 alpha 版。

当前支持此内容的浏览器是 Firefox 和 Chrome 35(Chrome 35 当前为 beta 版,并且必须使用此版本,因为当前的 Chrome 34 发布版本有一个 JavaScript 漏洞,可导致该游戏僵死)。

请点击以下图标,在您的浏览器中播放 《死亡扳机 2》(Dead Trigger 2)(由 Madfinger games 制作),在 WebGL 中展示身临其境的全屏 FPS 体验。控制方式如下:WASD 控制行走,鼠标查看,Q 切换武器,Tab 切换到近战格斗,1、2、3 代表特殊力量(请尝试!)。

这是我们的经典 愤怒的机器人(AngryBots) 演示版(在 Firefox 和 Chrome 的发布版本中运行正常):

技术细节

如上所述,要在 WebGL 中运行,我们的所有代码都必须是 JavaScript。我们使用 Emscripten 编译器工具链来将 Unity 运行时代码(用 C 和 C++编写)交叉编译到 asm.js JavaScript 中。asm.js 是 JavaScript 极具可优化性的子集,可使 JavaScript 引擎将 asm.js 代码 AOT 编译到非常高性能的原生代码。

要将 .NET 游戏代码(您的 C# 和 UnityScript 脚本)转换为 JavaScript,我们内部开发了一项名为 IL2CPP 的新技术。IL2CPP 获取 .NET 字节代码,并将其转换为相应的 C++ 源文件,然后我们可使用任何 C++ 编译器(例如 Emscripten)来将您的脚本转换为 JavaScript。敬请期待有关 IL2CPP 的详细信息。

Unity 5.0 中的 WebGL

我们计划将 Unity 5.0 中可用的 WebGL 支持作为早期访问插件(在您询问之前,我们先告诉您:此插件的条款和价格待定。)早期访问表示可将内容发布到 WebGL(如以上示例),但在功能和浏览器兼容性方面会有一些限制。特别是不支持以下功能:

• Substance纹理的运行时生成

• 影像纹理

• 不同于 WWW类的网络实现(一个WebSockets 插件)

• 支持网络摄像头和麦克风访问

• 硬件光标支持

• 许多非基本音频功能

• 脚本调试

• 线程

• 任何需要动态代码生成的 .NET 功能。

在浏览器支持方面,此最初版本将仅支持 Firefox 和 Chrome 的桌面版(其他浏览器可能对某些内容可用,但仅这两种浏览器受到官方支持)。

我们可望在 5.x 发布周期内解决大部分此类局限(平台导致的限制除外),并可支持更多的浏览器和成熟平台,这时我们将摈弃早期访问标签,使 WebGL 成为 Unity 中完全受支持的构建平台。

Unity 5 中的 Unity Web Player

虽然 WebGL 是非常激动人心的新技术,但当前 Unity Web Player 仍然是 Unity 针对 Web 的功能最完善的且性能最高的解决方案,并将继续在 Unity 5.x 中作为支持的平台。同时使用 WebGL 和 Web Player 来双重发布您的内容可能是非常有用的策略,可最大范围覆盖受众。

但是,从更长远的角度看,我们希望 Web Player 和 WebGL 之间在性能和功能方面的差距大大缩小,我们还希望浏览器供应商通过放弃对插件的支持来淘汰 Web Player,届时 WebGL 将成为 Unity 针对 Web 的主要解决方案。