Unity开发WebGL项目开发问题与解决方法汇总

因公司需要做一个在集成在公司平台产品上的unity仿真教学项目,开始了解unityWebGL的内容,统计下其中遇到的一些坑和解决方法的总结,于是有了这篇文章。对于unity我是一个初学者,所以很多东西不是很理解,遇到不会的地方就上网或者找书解决,unity webgl作为近几年才兴起的一个东西,网上能找到的帮助实在是太少了,希望这篇文章能帮助到有需要的人。

Unity版本:5.4.6

问题一:webgl调试问题,webgl的调试不是很方便,只能在火狐和edge浏览器上直接运行,使用谷歌必须部署在服务器上,或者使用以下方法:右键单击谷歌浏览器的桌面快捷方式,在目标里面加上," --enable-webgl --ignore-gpu-blacklist --allow-file-access-from-files”,注意有空格符的地方一定要加空格符,然后点击应用,再点击确定,重启浏览器,你的谷歌浏览器已经开启了webgl!


方法:打开谷歌,在地址栏输入:chorme://falgs,然后enter,在里面找到WebGL2.0这个选项,单击菜单栏,将Default切换为Enable。

个人推荐推荐使用edge。
以上方法大部分可以在网上搜到的。

问题二:webgl的支持,webgl。。。不支持很多东西,很多写完的功能编译成webgl的时候会失败,具体webgl支持什么和不支持什么,可以上 https://docs.unity3d.com/2019.1/Documentation/Manual/webgl-gettingstarted.html 这个网址看一下,这里强调一下,unity webgl不支持麦克风类。。公司的项目是需要调用麦克风来实现录音保存本地的,等到做完才发现编译不过,太蛋疼了(可怜我看了几天文章又写了几天才实现的录音功能T-T)。只能是通过网页来实现录音,即网页端实现录音功能,unity调用网页端方法来实现录音。webgl只支持一些很基础的声音操作,所以做成webgl版本的unity,就不用想着给声音加特效了。。。

问题三:webgl 解析json字符串,因为不支持第三方dll,只能用自带的 JsonUtility 类,先弄一些类出来,对应json字符串的内容,要加[Serializable]标签,如下:

 [Serializable]
    public class testClass
    {
        public string state;
        public string message;
        public string data;
    }

其中 state message data要与json里的内容的名字对应,比如json应该是这样的:

{"state":"xxxxx","message":"xxxxxxx","data":"xxxxxxxxx"}

如果是字符串里面还包含数组的,就得再 [Serializable] 一个类,比如

{"state":"xxxxx","message":"xxxxxxx","data":"xxxxxxxxx","arr":{["id":"0","name":"李狗蛋","sex":"男","sort":"0"]}}这样的json字符串,就得

 [Serializable]
    public class testClass
    {
        public string state;
        public string message;
        public string data;
        public List<cls> arr;

    }
 [Serializable]
 
    public class cls
      {
        public string id;
        public string name;
        public string sex;
        public string sort;

    }

记住名字要对应。

问题四:webgl与网页对接,在发布的webgl的index.html里面修改增加一些东西,我使用的版本是5.4.6和5.5.3

都是只需要在后面加上 

function funName(str)
{
   SendMessage("objName","objFunName","value");

}

之后,unity可以通过

 Application.ExternalCall("funName",value);

记住value是一个字符串值,而SendMessage()方法,第一个参数objName是unity场景里面的物体的名字,这个物体上搭载了脚本,脚本内包含的方法的名字,就是第二个参数objFunName的值,第三个参数value也是一个字符串值,记住只能传递一个参数,所以如果需要多个参数的,一般只能用字符串拼接的方式。

问题五:加载速度慢,这个问题我还没有寻找到解决方法,希望有看到这篇文章的大神知道的话可以指导下,本身我对unity的一些东西就不是很懂,希望不吝赐教。

总结:如果项目内 对场景,人物,模型要求比较精细的,和需要实现的功能比较花里胡哨的,那就不要做成webgl版,坑太多!!

猜你喜欢

转载自blog.csdn.net/qq_21091721/article/details/86519427
今日推荐