最近公司開始搞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")); //創建一個材質
- }
- //這允許你使用基於shader的過濾器來處理最后的圖片,
- //進入的圖片是source渲染紋理,結果是destination渲染紋理。
- void OnRenderImage (RenderTexture source, RenderTexture destination) {
- //拷貝源紋理到目的渲染紋理。這主要是用於實現圖像效果。
- //Blit設置dest到激活的渲染紋理,在材質上設置source作為
- //_MainTex屬性,並且繪制一個全屏方塊。
- 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~