UnityWebgl问题总结
1.webgl不显⽰字体
开始导出来发现⼀些字不显⽰,还以为分辨率压缩Text⽂本导致字不显⽰,后来发现原来是webgl的问题,查阅信息说不要使⽤unity⾃带的字体即可。
2.webgl⽆法输⼊中⽂
某⽜博主解决中⽂输⼊插件
CSDN博主分享中⽂输⼊插件
两者综合使⽤!
3.字体模糊
这个⽐较常见,unity默认使⽤Text的字体放⼤就会很模糊,甚⾄看不清,解决这个问题的办法就是使⽤TextMeshProUGUI插件,这个插件可以在PackageManager⾥下载。
unity 教程
这个插件的优点是:
1.你可以⾃⼰制作不同的字体;
2.⽆论放⼤多少倍,或者字体⼤⼩很⼩时,都会很清晰的显⽰;
4.webgl导出包浏览器打开报错超出内存⼤⼩
做成webgl的项⽬或多或少会出现这样的错误,经查官⽅资料,使⽤unity2018版的可以调节导出包使⽤内存的⼤⼩,unity2019版本开始就删除了改变内存⼤⼩的值,:(然后到有个解决办法是代码改变内存⼤⼩,发现Universal WebGL template模板下有段代码被注释了就是改变内存⼤⼩的,然后试着加⼤内存的值,在⽕狐浏览器是可以正常打开的,然⽽在Google浏览器就直接报另外⼀种错误,欲哭⽆泪,甲⽅要求使⽤的是Google浏览器,只能另寻其他办法,最后到的解决⽅案就是使⽤Asset Bundle来加载包,减少包的⼤⼩,减少内存的使⽤。
5.webgl使⽤Asset Bundle加载资源模型材质显⽰异常
刚开始导出webgl包和ab包,使⽤浏览器加载,然后发现⼀⽚红啊,使⽤ab包加载的有⼀部分模型材质显⽰为粉红⾊,第⼀反应就是材质丢失,以为是ab包卸载了材质的资源,然后经过更改代码不使⽤卸载,发现还是⼀样。。。那就不是这个原因了,⽹上查阅了⼀些资料,发现原来需要将相关的shader添加到ProjectSettings->Graphics->Always Included Shaders⾥,切记将unity Standard材质包
含在内,不然你会发现你导出webgl包会⾮常慢并且你的包的⼤⼩会很⼤,因为它包含了成⽩上千种shader,所以这⾥尽量少使⽤Standard,使⽤也可以,就是效果会变化,在编辑器显⽰很好,导出来就跟换了⼀种shader⼀样,尽量使⽤其它可以替代它的shader,或你可以去编写shader,或使⽤ShaderGraph插件编写的shader,然后包含在这⾥就可以了,这样导出速度快且包⼩。
6.webgl使⽤Asset Bundle加载资源的⼀些注意事项
使⽤Asset Bundle Browser插件,可以在PackageManager⾥下载,使⽤教程⽹上也有很多,这个插件⼩编觉得蛮好⽤的,可以显⽰不同ab 包是否有重复的资源,让开发者减少ab包的⼤⼩。下⾯是使⽤ab包的⼀些注意事项:尽量使⽤多个ab包,且每个ab包⼤⼩不要超过20M,使⽤ab包分类管理;尽量不使⽤阻断协程的⽅法来加载ab包;ProjectSettings->Player->Strip Engine Code不要勾选;加载后注意要记得UnLoad(false),减少内存的使⽤;ab包使⽤的shader要包含在ProjectSettings->Graphics->Always Included Shaders⾥;使⽤LZ4压缩。
7.webgl播放视频
这个算是⽐较简单,⽹上插件也⽐较多,unity⾃带的VideoPlayer,可以播放本地视频和Url,注意需要⼀开始时不要勾选Play on Awake,在浏览器会播放不出视频,我使⽤的是AVProVideo,这个插件还不错,⽀持PC、android、IOS、Webgl、Mac等平台,可以⾃⾏选择,⽹上教程也有很多,同样注
意开始时不播放视频。
8.webgl播放视频流实时视频
项⽬中有播放rtsp视频流的要求,然后查阅了⼀些资料,了半天就看见⼀个插件UMP Pro Win Mac Linux WebGL ,⽤了之后发现webgl好像不⽀持,实属垃圾,后⾯到⼀篇Unity WebGl播放m3u8在线视频(监控,直播)解决⽅案,这篇很不错,想学习的可以试试。
9.webgl json序列化和反序列化问题
使⽤unity⾃带的JsonUtility.FromJson()解析json数据在编辑器可以很好的解析,即使定义为int型数据,数值为Null,这个在webgl⾥也可以解析,但是有些数据结构是不能正常解析的,⽐如Dictionary字典,在编辑器能正常解析,但是在webgl⾥就不能正常解析了,后⾯了另外⼀个Newtonsoft.Json来解析,这个可以正常的解析字典数据,但是要求你定义正确,unity⾃带的JsonUtility.FromJson()不需要定义属性正确,可能还会出现某些⼈给你的接⼝定义某属性是int型,但是给的数据却是null,这类⼈也不少吧,那怎么办呢,使⽤Newtonsoft.Json来解析就会报错,说这个属性定义错误,也是崩溃。。。好在查资料有这个解决办法,就是使⽤int?来定义,其它类型float?、long?都可以这么来定义,这样就可以解决这个问题了。
10.webgl+nginx搭建简单服务
打包出来的webgl有些浏览器是不⽀持直接打开的,Google和⽕狐浏览器就不能直接打开,所以需要搭建简单的服务器来打开webgl⽹页,下⾯⼀篇⽂章很好的解决这⼀问题unity webgl + nginx服务器 You can reduce your startup time if you configure your web server to host 11.webgl解决模型锯齿问题
模型锯齿问题unity⾃⾝的解决⽅案是:Project Settings->Quality->Anti Aliasing 选择8x Multi Sampling,Quality 记得选中webgl平台下你设置好的选项。当然还有⼀些插件都会有抗锯齿的优化,⽐如PostProcessing后期处理特效的插件,有兴趣可以试试。
12.webgl调式
相信开发webgl项⽬的朋友应该都知道,在编辑器下编写能正常运⾏,但是呢导出webgl⼀运⾏就会发现各种错误,恨不得unity出⼀个在⽹页上测试使⽤的编辑器,配合VS⼀段代码进⾏调式,但是这是不可能的,所以就尽量使⽤debug来定位错误吧,⼩编也是被折磨的不⾏,因为某些功能只能在特定机器上部署测试,这使我代码出错了只能写debug来定位了,所以多写⼀点,因为导出包不易啊!⼀次打包10分钟,想要很好的测试哪段代码出问题就得看debug了,记得勾选ProjectSettings->Player->Enable Exceptions为Explicitly Thrown Exceptions Only,不然在浏览器控制台就看不到debug了,最后正式上线记得关掉。
13.webgl性能优化
当你满怀欣喜的打开你的项⽬,发现你的项⽬就像播放PTT⼀样,那就的做优化了,优化有:
1.减少模型的⽚⾯数和顶点数(尽量不使⽤球和圆柱体这两个⽚⾯数太多了);
2.使⽤静态合批,勾选Project Settings->Player->Other Settings->Static Batching,相应的物体Static需要勾选Batching Static;
3.使⽤动态合批,勾选Project Settings->Player->Other Settings->Dynamic Batching,相应的物体Static需要勾选Batching Static;
4.贴图如果模糊的话,去掉勾选Generate mip map,尽量将MaxSize减少;
5.去掉阴影,使⽤光照贴图;
6.如果模型的材质不需要受到光照影响,尽量使⽤Mobile/Diffuse或者Unlit/Texture;
7.尽量删除碰撞体;
8.删除没有⽤的Animator(有些模型导⼊会有);
9.尽量少使⽤Animator,简单的动画使⽤Dotween或者使⽤Animation,繁琐的、多状态才使⽤Animat
or;
10.删除⽹格碰撞,尽量不使⽤⽹格碰撞;
11.使⽤光照烘焙,使⽤Reflection Probe和Light Probe Group,属性设置完成后,将需要受光照影响的模型放置⾥⾯,在lighting⾯板点击bake即可(物体删除都可以,数据已经存在Scene数据⾥了);
12.使⽤遮挡剔除,物体放置在Occlusion Area,static勾选Occluder static和Occludee static,在Occlusion⾯板进⾏bake即可(物体删除都可以,数据已经存在Scene数据⾥了);
13.开始运⾏时尽量少使⽤new;
14.使⽤LOD(这个不太推荐使⽤,只有内存充⾜下使⽤,⼀般webgl内存都是吃紧的,搞不好就是内存超出)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。