Unity3D在NGUI中使用mask
来源:互联网 发布:csol去黑雾软件2017 编辑:程序博客网 时间:2024/05/17 22:38
过程是这样的:最近一直想做一个头像的mask效果,后来发现原来unity的mask需要用shader来写,网上找了不少资料,也能实现,不过大多数都是用render texture作为相机投影的texture。然后把这个相机的图像作为一个material,然后在ngui中创建一个texture,把这个material赋给texture。怎么说呢,这种方式虽然也能实现,但是必须要创建一个相机,对于一个大型项目来说有点不切实际。一个头像加个mask多简单的一件事,肯定有更好的办法。
最终还是找到了一种很好的方法,这种方法更接近想象中的方法,废话不多说了,跟我一步步做吧!
首先,我们需要新建一个shader。然后给他添加下面的代码。
在project试图中,右键->Create->Shader,新建一个shader,名字随便。
顺便说下shader吧。太官方了可能不好理解,大概意思就是,在渲染的时候shader规定了某些规则,这些规则往往是用来实现某些炫酷的特效,或者为了某使些功能更高效。
代码中的Properties相当于unity脚本中的公共变量,当把shader赋给某个material时这些变量就能想出来,你可以给他赋值 ,跟unity脚本基本一样。
代码中的SubShader是子渲染器,这里面就能访问到前面设置的变量,这里主要是实现shader功能的地方,当然你还可以在这里面定义函数,等等,但是函数是用的一种叫Cg / HLSL的语言。
Pass,是渲染通道。这里可以设置一些参数来规定渲染方式。
好了我们接着做mask。如果shader代码能看懂的话,基本你也就会做了。
它主要做了两件事:
1,给两个texture赋值,其实就是两张图片。
2,把_AlphaTex中不透明的像素和_MainTex中的像素输出,其实就相当在MainTex中抠出一个AlphaTex中不透明的那部分形状一样的图块。
其实刚开始我搜到了不少shader,很多都没有提到怎么使用,下面来看一下
其实很简单,点击建好的shader在inspector面板中你会看到
顺便说下shader吧。太官方了可能不好理解,大概意思就是,在渲染的时候shader规定了某些规则,这些规则往往是用来实现某些炫酷的特效,或者为了某使些功能更高效。
代码中的Properties相当于unity脚本中的公共变量,当把shader赋给某个material时这些变量就能想出来,你可以给他赋值 ,跟unity脚本基本一样。
代码中的SubShader是子渲染器,这里面就能访问到前面设置的变量,这里主要是实现shader功能的地方,当然你还可以在这里面定义函数,等等,但是函数是用的一种叫Cg / HLSL的语言。
Pass,是渲染通道。这里可以设置一些参数来规定渲染方式。
好了我们接着做mask。如果shader代码能看懂的话,基本你也就会做了。
它主要做了两件事:
1,给两个texture赋值,其实就是两张图片。
2,把_AlphaTex中不透明的像素和_MainTex中的像素输出,其实就相当在MainTex中抠出一个AlphaTex中不透明的那部分形状一样的图块。
其实刚开始我搜到了不少shader,很多都没有提到怎么使用,下面来看一下
其实很简单,点击建好的shader在inspector面板中你会看到
从project视图中把两张图片拖上去就可以了。
MainTex是你要显示的图片
AlphaTex是你要抠图的形状,注意这张图除了形状可以用任何颜色以外其他必须都是透明的,而且图的大小要跟MainTex图片一样大。
最后就是使用了,用NGUI创建一个Texture,把shader拖到UITexture脚本的shader变量中,你会发现兴奋的事情发生啦!!最终效果如下:
0 0
- Unity3D在NGUI中使用mask
- Unity3D NGUI中使用.9png
- Unity3D NGUI的使用
- unity3D 在UGUI中模拟NGUI的spine with mouse
- Unity3d中使用NGUI的时候图片很模糊
- unity3d mask
- 在unity3D中使用xml
- 在Unity3D中使用EmguCV
- 在Unity3d中使用Json
- 在 Unity3d 中使用 GLSL
- 在Unity3D中使用全局变量
- 在Unity3D中使用委托
- Unity3D的NGUI中如何在精灵中导入自定义的图片
- Unity3D NGUI从背包中拖出并在场景中生成物体
- 【unity3d】解决NGUI在VR·cardboard中UI分屏的问题
- unity3D,NGUI中button响应事件实现
- Unity3d中利用NGUI实现虚拟摇杆
- 【Unity3D】【NGUI】UIRect的Anchor的使用
- 跨平台C++毫秒计时——以Quick Sort算法为例子
- 2014年 挥泪告别
- 修改jekyll配置增加扩展内容
- Letter_Napoleon Bonaparte to Josephine(拿破仑波拿巴致约瑟芬)
- PostgreSQL 时间函数的比较
- Unity3D在NGUI中使用mask
- 手机网络通信渠道在开发中的运用
- Python标准库:内置函数property(fget=None, fset=None, fdel=None, doc=None)
- MyBatis直接执行SQL的工具SqlMapper
- 蓝屏0x00000077详解
- struts2登录界面
- .net中 Timer定时器的奥秘
- intellij 取消svn 用户名 密码
- 西方经济学