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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章