您的位置:首页 > 移动开发 > Unity3D

Unity3D特效-场景淡入淡出

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

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

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

[csharp] view
plain copy







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的源码如下:

[plain] view
plain copy







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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: