位置: 编程技术 - 正文
推荐整理分享[Shader]对NGUI的UISprite和UITexture进行裁剪(shaders initialized),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:shader language,shader unroll,shader unity,shader 语言,shader 语言,shader cull,shader language,shader unroll,内容如对您有帮助,希望把文章链接给更多的朋友!
这个应该是挺常见的,或许你会说,美术直接帮你裁成圆的不就可以吗。有时候可以,有时候不行。什么时候不行呢?当你在游戏中有些地方使用方形的,有些地方使用圆形的。这时候就不能让美术帮你裁了。不然不就有两份资源了。
本文读者最好已经知道怎么使用NGUI创建图集,使用它的UISprite和UITexture。
本文编写测试环境为:系统:Win7 X引擎:Unity3D V4.3.3插件:NGUI 3.5.7
1、开始动手作为一个学习过两天Shader的人,我觉得,这应该难不倒我。因此,我立马在U3D的Project面板中噼里啪啦一阵狂搞。创建一个Shader。
2、编写第一版Shader。双击我们上面创建的Shader。因为这个是给NGUI用的。然后我就依照NGUI的Shader命名,给我们的Shader命名为:Unlit/Transparent Colored MaskShader代码如下:主要实现裁剪的代码为:相信大家很容易就看懂了,这里是把Mask贴图的Alpha通道的值和原图片的进行相乘。怎么用呢。新建一个UItexture。
然后选择一个材质。用上我们上面的Shader。然后设置一个Mask。这个Mask图片为
可以看到Alpha通道里面是一个白色的圆圈。记得这个Mask图片的导入设置如下:那么可以看看运行效果:3、欢呼,庆祝?貌似一切都挺顺利的。但是这个Shader能否对UISprite起效果呢?我们来试试。随便搞个图集。然后加个UISprite,然后修改这个图集的材质使用我们的Shader。
额。。。效果咋成下面这样啦。。。不太对的赶脚
4、停一停想一想难道这是NGUI的bug。。。啊!!!啊!!!!!不行,我要想想看。。。。。。。。。1分钟过去了。为什么col.a = col.a * tex2D(_Mask, i.texcoord).a这个公式对Sprite的效果是错误的呢。难道i.texcoord的范围不是0~1.这么一想,倒好像也有点道理。因为NGUI把要用到的图片做成了图集。因此,每次只是取图集中的一小个区域显示到UI的Mesh上。那么,我只要把i.texcoord的范围重新映射到0~1。然后用于取Mask上面的颜色,不就OK了吗?机智的我立马动起手来。好了。那么怎么使用这个Shader。我们需要多一个脚本来设置这个shader的参数。只要把这个脚本附在UISprite上即可。可以发现现在正常了。NGUI图集的材质变成了好了。这次真的可以好好庆祝下啦~~整个效果其实只用上面的Shader和那个ScaleTexcoord.cs即可。
下载测试工程:
Unity3D异步加载方法 异步加载的方法很多,这里我介绍一下我前段时间学到的一个异步加载方法,感觉挺好用,有兴趣的可以看看,下面就直接贴代码:///summary///Asynctoload./
unity角色选择功能 一般游戏的开始都会有人物选择界面和人物选择功能;现在就先看一下这个界面。。。。这里有俩个角色从属性面板就可以看到了,当然这是完成品了
SDK 学院:第四节、Unity CurrentActivity是什么? SDK学院交流群:
友情链接: 武汉网站建设