UI总是会有很多奇奇怪怪的圆角矩形,虽然要在UIToolkit中实现是很简单的事情,但目前还是不太成熟,还是要用UGUI。在UGUI中要实现大致有三种方法,这里用Shader来实现一下。
单纯圆角图片
这是最麻烦且没必要的一种,针对不同分辨率和曲率要UI给出不同的图片,效率很低
9切片
把图片分割成9个部分,每个部分有不同的UV平铺与重复的方式,但是要实现像素级别的点对点,就需要准备不同分辨率的切片圆角矩形,也很麻烦
Shader实现
直接用SDF实现,一劳永逸。保证点对点的准确度,即使再搞什么圆角加描边也能快速实现。
UI shader
UI的shader与一般的差别不大,只是对一些命名有点小要求。
- 传入的主贴图名称为
_MainTex
当然如果你不想用Image传入的就随便了。
- 同时还会传入颜色
float4 color : COLOR;
- 默认的一些配置
- ZClip True
- ZTest Always
- ZWrite Off
- Cull Off
- UGUI传入的顶点并不仅仅是一个面片,根据不同的设置,它会生成特定的网格传入GPU,而且UV分布也不一定是均匀的,所以要用特定的简单Sprite。
SDF
从shaderToy上抄一个
Shader
最后贴一下Shader
其他
这里的SDF可以简单替换其他各种奇奇怪怪的类型,比如参考这个链接distfunctions2d。再结合一些变化的参数就可以做出动画效果了。