最近公司开始搞unity3d..整个游戏..特效需求还是比较多的.关于UI部分的特效淡入淡出.看网上用的方法都是用个黑东东遮挡然后设置alpha这么搞....本大神感觉非常的low.而且很渣.故奋笔疾书借此文鄙视那些low方式.
关于这种处理用shader配合Material非常简单的.先来介绍下使用了哪些东东.
1.肯定是需要一个脚本的.本人用的C#.当然JS也是可以的. 需要把脚本bind到主摄像机..因为我们需要重载Camera的OnRenderImage借此来获得屏幕的sampler2D(就是屏幕截图吧可以这么理解 shader里面sampler2D就是一个texcood)
- using UnityEngine;
- using System.Collections;
-
- public class Test1 : MonoBehaviour {
- public Material ma;
-
- void Start () {
- ma = new Material(Shader.Find("Custom/Test3"));
- }
-
-
-
- void OnRenderImage (RenderTexture source, RenderTexture destination) {
-
-
-
- Graphics.Blit(source, destination, ma);
- }
- }
2.如果需要控制淡入淡出.就要使用材质的SetXXX接口来设置Shader的Uniform.Shader的源码如下:
- Shader "Custom/Test3" {
- Properties {
- _MainTex ("Base (RGB)", 2D) = "white" {}
- _Float1("Float1",Float) = 0.0
- }
-
- SubShader {
- Pass {
- CGPROGRAM
-
- #pragma vertex vert
- #pragma fragment frag
-
- uniform sampler2D _MainTex;
- uniform float _Float1;
-
- struct Input {
- float4 pos : POSITION;
- float2 uv : TEXCOORD0;
- };
-
- struct v2f {
- float4 pos : POSITION;
- float2 uv : TEXCOORD0;
- };
-
- v2f vert( Input i) {
- v2f o;
- o.pos = mul (UNITY_MATRIX_MVP, i.pos);
- o.uv = i.uv;
- return o;
- }
-
- float4 frag (v2f i) : COLOR {
- float4 outColor;
- outColor = tex2D( _MainTex, i.uv) + _Float1;
- return outColor;
- }
- ENDCG
- }
- }
- Fallback off
- }
3. 在材质中可以看到 Float1这个Float值.改变其值就会看到整个画面明显的变化.如果想黑屏就往下调.如果想白屏就往上调.
4. 最后游戏里面淡入淡入就修改材质的Float1这个值就ok了.多的就不说啦. 祝大家看的开心 玩的愉快..bye bye~
附带源码: http://download.csdn.net/detail/spiritring/6781673