unity实战 实现鼠标选择对象前置显示
需求介绍:
实现玩家选中的对象在前置显示
实现方案:
方案一:深度写入和深度检测
说明:
ZTest:深度测试(LEqua小于等于、Less小于、Greater大于、Equal等于 , NotEqual不等于)
默认是LEqual,是一个对比颜色深度的方式,LEqual是表示新颜色小于等于旧颜色的深的时候,即替覆盖颜色,从上面写入的深度缓存里拿到自己的深度进行对比
ZWrite:深度写入(On打开、Off关闭)
默认是On,这个定义表示这个材质的颜色将会写入缓存当中,记录当前颜色的深度,可以与其他颜色进行深度对比,这个参数是为深度检测服务的
在shader里面两参数是隐式存在,如果要改变得显式修改。
当前的需求需要动态的改变当前的渲染顺序和深度检测方式,可以通过更换shader或者材质来实现(改参数的方式我没看到,应该是有的,但是shader我现在并不是特别的了解,还在学习中)
遇到的问题:(未解决)
模型去掉了深度检测之后,模型拿的武器,如果在背后的时候会渲染在身体前面,会穿透。(身体和武器的贴图是同一张)
方案总结
这个方案虽然实现这个功能不行,但是通过深度缓存和深度测试可以实现穿墙显示的效果,即不希望玩家在墙后面的时候被完全挡住的时候使用这个方案是可行的。思路是调整地面,山体,阻挡,和角色渲染顺序(由于已经关闭了深度测试,引起渲染的前后就完全由渲染顺序决定,这里只要排好序)如果想要做一些身体的变化可以shader写一些效果。
方案二:镜头使用layer分层渲染
说明:
camera上有一个Culling Mask参数,可以选择镜头渲染的Layer层,比如ui,hero等等可以自己设定。
两个镜头绑在一起的时候,那么镜头参数是一致的,可以将两个镜头显示的内容合并在一起,比如镜头1显示地表,镜头2显示角色。
总结:
优点是分层实现,缺点多是多了镜头,效率会有一定影响。多了肯定很吃性能。得尽量把不需要的参数去掉。
参考博客:
深度测试和深度写入例子讲解,很容易懂
https://www.cnblogs.com/kane0526/p/9845765.html