这两天在研究如何将Unity3d项目发布为html,并将网页发布到服务器上使得外部网络/设备也能进行共享。
总结整个过程需要解决的2个关键问题是:
- 如何让移动端设备加载WebGL
- 如何构建并部署IIS
下面我结合个人实践和几篇可行的博客来将整个过程梳理一遍:
一、构建一个Unity的WebGL发布版本
首先是在安装unity的时候应该框选WebGL选项,如果在安装时漏了勾选也可以在build setting里找到WebGL模块,然后点击Platform Module Installation安装。
在项目完成后building的时候选择WebGL,直接build即可,完成后会生成一个名为index的html文件,一个Build文件夹,一个TemplateData文件夹。
对于早期版本(如unity5.4.0),build完成后会生成一个Release文件夹、一个TemplateData文件夹。
二、删除关键代码段
根据Unity3d的官方文档(目前是2018.9.12修改的版本)中的叙述,一些移动端是不支持WebGL的功能的
就我实验的设备(Samsung GALAXY S9)而言是可以用一些浏览器正常加载WebGL的,不过在加载前需要去掉.js文档中的一个关于移动端的判定。
这篇博文介绍了相关内容,只是因为经过版本更迭,.js文件进行了修改,现在需要删去的语句是Build/UnityLoader.js的770行左右的一个条件语句,即下图中注释掉的语句。
通过的实验,如果不注释掉相关语句,在移动端设备运行网页时将不会加载unity的WebGL模块。
三、构建IIS
构建IIS的过程在网上有很多帖子,感兴趣可以进行查阅。
这里我本着比较简洁和准确的原则做了整理,这篇博客的方法很细致,跟着做到输入http://localhost出现IIS欢迎界面即可。
四、创建网站并开放
在控制面板中切换成大图标,找到“管理工具”双击,打开Internet Information Services (IIS)管理器。
跟着博客做到第3步完成。注意添加MIME类型的时候要选中的是新建的网站,添加的名字和属性在博客的图片中(unity3d和unityweb那个)。修改完后会发现在项目物理位置下多了一个web.config。
对于早期版本(如unity5.4.0),还要对web.config进行的设置,否则会在加载前报一个头部检查的异常(incorrect header check ),根据unity论坛上的一个回答,设置方法如下:
在web.config文件中相应位置添加如下语句
<configuration> <system.webServer> <staticContent> <remove fileExtension=".mem" /> <mimeMap fileExtension=".mem" mimeType="application/octet-stream" /> <remove fileExtension=".data" /> <mimeMap fileExtension=".data" mimeType="application/octet-stream" /> <remove fileExtension=".memgz" /> <mimeMap fileExtension=".memgz" mimeType="application/octet-stream" /> <remove fileExtension=".datagz" /> <mimeMap fileExtension=".datagz" mimeType="application/octet-stream" /> <remove fileExtension=".unity3dgz" /> <mimeMap fileExtension=".unity3dgz" mimeType="application/octet-stream" /> <remove fileExtension=".jsgz" /> <mimeMap fileExtension=".jsgz" mimeType="application/x-javascript; charset=UTF-8" /> </staticContent> </system.webServer> </configuration>
最后参考这篇文章对服务器进行开放即可。
五、运行
完成后用命令行(win+R,输入cmd)查询本机ip(ipconfig/all),最后的网址为:
本机ip:开放的端口号
注意在加载时刷新,第一次往往加载较慢。通过实验现在已经可以运行的各种设备上的浏览器如下:
PC端:chrome、firefox
Android:firefox、360、chrome、qq
目前手头的ios设备(mini2、iPhone7P)可以加载但无法运行
欢迎交流和指正。