【Unity】经验汇总

摘要:
Mipmap导致模型显示UV接缝问题。UGUI组件前渲染半透明物体问题记录一下:Unity5.4.2问题:在半透明UI上渲染半透明物体不显示。如果开启Zwrite,半透明物体显示,但发现半透明物体与UI后的场景进行了透明度混合。现在的解决方案是:给半透明物体挂一个脚本,调整其sortoder值,使得半透明物体的sortorder大于UI组件的sortorder。在渲染优先级中,相机的优先级最高,其次是sortlayer的优先级,再次是sortorder的优先级。

移动平台使用顶点动画或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在不透明队列后面执行,结果第一种深度显示正常,第二个没有深度。第二种操作是不进行深度测试的。

免责声明:文章转载自《【Unity】经验汇总》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇but was actually of type 'com.sun.proxy.$Proxy101' 注入问题支付宝退款流程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Unity编辑器-创建单独编辑框,折叠框,提示框

今天我们就来学习如何创建一个编辑框,上面绘制一个折叠框里面有四种消息框. 代码如下: using UnityEngine; using System.Collections; using UnityEditor; public class Test : EditorWindow { private bool foldoutType;...

shader 的 nounroll

刚刚解决了一个特别坑的问题。 客户有个需求 需要shader里面 loop 的iterator数量 在运行时确定。z 这样对于里面存在  sample的loop就会被force unroll但因为count不确定 就没法unroll就编译不过了 我发现只有一个方法就是 关掉unroll  我试验了各种 在shader里面用预编译指令 关unroll 的方法...

python定时任务-sched模块

通过sched模块可以实现通过自定义时间,自定义函数,自定义优先级来执行函数。 范例一 1 importtime 2 importsched 3 4 schedule =sched.scheduler( time.time,time.sleep) 5 6 deffunc(string1): 7 print "now excuted...

Nginx+keepalived 高可用双机热备(主从模式)

环境:centos7.6 最小化安装 主:10.11.1.32 从:10.11.1.33 VIP:10.11.1.130 修改主节点主机名: hostnamectl set-hostname web_balance_01 修改从节点主机名: hostnamectl set-hostname web_balance_02 一、安装nginx(两个节点都需要安...

PHP运算符“逻辑运算符”

今天来给大家讲解PHP的第五种运算符,也是在我们程序中非常重要的一组运算符,“逻辑运算符”。大理石量具哪家好 什么是逻辑运算符? 逻辑运算,大家应该都不陌生,在上学期间数学课本里面就有关于逻辑运算的知识,就是我们常说的“或与非”;逻辑运算符是PHP程序中一组非常重要的运算符,用来组合逻辑运算的结果。 PHP中的逻辑运算符如下表 运算符名称 例子 结果...

【Unity插件】NGUI核心组件之UIPanel .

转自:http://blog.csdn.net/daiguangda/article/details/7840084   UIPanel负责创建实际的集合图形。你不需要手动的添加UIPanel-一旦你创建一个控件,它会自动被添加。如果你想将你的UI渲染拆分到不同的Draw Call中,你可以手动创建你自己的UIPanel,例如你要创建一个分屏的游戏,每个屏...