【Unity】经验汇总
移动平台使用顶点动画或UV动画的问题 5.4.2
在开发中,游戏打包到移动平台常出现的两种问题:
1.顶点动画:卡顿,动画变得生硬。
2.UV动画:贴图马赛克,模糊。
在实际问题解决中发现,导致这种问题的一般都是精度问题,移动平台开发针对大量性能不一的GPU。各种无法预料的问题。
很多效果在PC上的模拟器正常,打包到安卓还有ios就会出现各种奇怪的问题。
个人的移动平台图形编程功夫还不到家,只能摸索着解决。
UV动画出现卡顿,解决方案,限制UV的范围。只能缓解。
涉及到_Time的使用时,很大几率会出现问题。不管是使用_Time进行UV顶点,还是顶点动画,在一些移动设备尤其是旧的移动设备上,shader mode 2.0,fragment shader精度低的情况下,基本上都会有问题。
Mipmap导致模型显示UV接缝问题。5.4.2
基本上是纹理采样精度的问题,尤其是在UV很紧张的情况下,使用双线性过滤这种不够精确的纹理采样技术以及Mipmap使用的图片像素较低的情况下,由于采样精度误差导致UV外的颜色被显示出来。解决的方案挺多,美术上是缩一下UV,留出一定的缝隙用来填充过渡色,减少这种黑线出现的概率。最好的办法是开启各向异性过滤,使得采样精度变高,精度误差的概率也会变的极低,但是各向异性过滤的主程序那边因为性能考虑并没有采用,所以使用美术修改UV的方式实现。
UGUI组件前渲染半透明物体问题
记录一下:
Unity 5.4.2
问题:在半透明UI上渲染半透明物体不显示。
游戏在一些情境下会有模型在UI组件前进行渲染展示的效果,一般来说是使用UGUI组件实现。
举例说明,Image组件覆盖整个屏幕,为半透明。Image组件前有一些不透明物体和一个半透明物体,半透明物体在不透明物体之前。我们在摄像机观察时,发现半透明物体只有在和不透明物体重合的部分出现,其余部分被挡住。
我们知道,半透明物体的渲染队列是在不透明物体之后的,这样可以防止出现透明物体后像素丢失的问题。但是在进行UI前渲染半透明物体时,UI组件比半透明物体渲染队列更靠后。
如果开启Zwrite,半透明物体显示,但发现半透明物体与UI后的场景进行了透明度混合。即显示在UI前的半透明物体,不与后面的UI组件进行透明度混合,反而和场景的物体进行了透明度混合。
即使将半透明物体的Queue设置为Overlay,依旧在UI组件的Canvas之前渲染。
现在的解决方案是:给半透明物体挂一个脚本,调整其sortoder值,使得半透明物体的sortorder大于UI组件的sortorder。
在渲染优先级中,相机的优先级最高,其次是sortlayer的优先级,再次是sortorder的优先级。然后根据这次尝试,shader中queue属性的优先级最低
使用Shader.Find打包问题
在代码中使用Shader.Find,结果打包到移动平台上报错空引用异常。原因是使用Shader.Find的着色器并没有被打包进包体中,需要手动always include中添加,或者采用设置引用的方式。
CommamdBuffer的深度问题
使用CommandBuffer,先cb.drawrenderer再拿rt和先拿rt后drawrenderer的结果竟然是不一样的?我的rt在不透明队列后面执行,结果第一种深度显示正常,第二个没有深度。第二种操作是不进行深度测试的。