Unity3D特效-场景淡入淡出

        最近公司开始搞Unity3D..整个游戏..特效需求还是比较多的.关于UI部分的特效淡入淡出.看网上用的方法都是用个黑东东遮挡然后设置alpha这么搞....本大神感觉非常的low.而且很渣.故奋笔疾书借此文鄙视那些low方式.

关于这种处理用shader配合Material非常简单的.先来介绍下使用了哪些东东.

1.肯定是需要一个脚本的.本人用的C#.当然JS也是可以的. 需要把脚本bind到主摄像机..因为我们需要重载Camera的OnRenderImage借此来获得屏幕的sampler2D(就是屏幕截图吧可以这么理解 shader里面sampler2D就是一个texcood)

[csharp] view plain copy
 
在CODE上查看代码片派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class Test1 : MonoBehaviour {  
  5.     public Material ma;  
  6.     //初始化  
  7.     void Start () {  
  8.         ma = new Material(Shader.Find("Custom/Test3")); //创建一个材质  
  9.     }  
  10.   
  11.     //这允许你使用基于shader的过滤器来处理最后的图片,  
  12.     //进入的图片是source渲染纹理,结果是destination渲染纹理。  
  13.     void OnRenderImage (RenderTexture source,  RenderTexture destination) {  
  14.         //拷贝源纹理到目的渲染纹理。这主要是用于实现图像效果。  
  15.         //Blit设置dest到激活的渲染纹理,在材质上设置source作为  
  16.         //_MainTex属性,并且绘制一个全屏方块。  
  17.         Graphics.Blit(source, destination, ma);   
  18.     }  
  19. }  


2.如果需要控制淡入淡出.就要使用材质的SetXXX接口来设置Shader的Uniform.Shader的源码如下:

[plain] view plain copy
 
在CODE上查看代码片派生到我的代码片
  1. Shader "Custom/Test3" {  
  2.     Properties {  
  3.         _MainTex ("Base (RGB)", 2D) = "white" {}  
  4.         _Float1("Float1",Float) = 0.0  
  5.     }  
  6.   
  7.     SubShader {  
  8.         Pass {  
  9.             CGPROGRAM  
  10.   
  11.             #pragma vertex vert  
  12.             #pragma fragment frag  
  13.   
  14.             uniform sampler2D _MainTex;  
  15.             uniform float _Float1;   
  16.               
  17.             struct Input {  
  18.                 float4 pos : POSITION;  
  19.                 float2 uv : TEXCOORD0;  
  20.             };  
  21.   
  22.             struct v2f {  
  23.                 float4 pos : POSITION;  
  24.                 float2 uv : TEXCOORD0;  
  25.             };  
  26.   
  27.             v2f vert( Input i) {  
  28.                 v2f o;  
  29.                 o.pos = mul (UNITY_MATRIX_MVP, i.pos);  
  30.                 o.uv = i.uv;  
  31.                 return o;  
  32.             }  
  33.   
  34.             float4 frag (v2f i) : COLOR {              
  35.                 float4 outColor;                  
  36.                 outColor = tex2D( _MainTex, i.uv) + _Float1;  
  37.                 return outColor;  
  38.             }  
  39.             ENDCG  
  40.         }  
  41.     }  
  42.     Fallback off  
  43. }  

3. 在材质中可以看到 Float1这个Float值.改变其值就会看到整个画面明显的变化.如果想黑屏就往下调.如果想白屏就往上调.



4. 最后游戏里面淡入淡入就修改材质的Float1这个值就ok了.多的就不说啦. 祝大家看的开心 玩的愉快..bye bye~

附带源码: http://download.csdn.net/detail/spiritring/6781673

原文地址:https://www.cnblogs.com/android-blogs/p/6101337.html