Unity游戏开发-UI中裁剪特效

在开发中,会遇到在UI上显示特效问题,不仅要考虑特效和UI的层级问题,有时候还要考虑特效的裁剪,比如在Scrollview列表中的item显示的特效,Mask默认是不会对特效进行裁剪, 所以需要修改特效的shader,达到裁剪的效果。

基本的原理

将mask的裁剪四边形,传递给shader,在片元着色器将位于裁剪区域外的片元剔除, 这样就能达到裁剪的效果。
在具体的shader裁剪中,参考了UI-Default.shader, 有一个操作,利用UnityUI.cginc的内置函数 UnityGet2DClipping()来获取结果,为我们节省了很多的步骤,不需要自己去判断顶点的位置。
片元着色器
在shader中使用了着色器的变体,为了通用性, 因为特效的shader一般都是公用的, 所以当需要使用时,在材质中开启关键字,再设置clipRect,就可以实现裁剪效果。
关于shader变体的知识,可以参考官方介绍
Mask的范围,利用Recttransfrom.GetWorldCorners()来获取。
可以在实例的SortOrder脚本中,看到层级处理 + 关键字的设置
具体的工程可以参考, MaskClipEffect场景
github
里面有实际的场景实例和下载的特效文件,后续也会不断补充。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章