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
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
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
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
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值.改变其值就会看到整个画面明显的变化.如果想黑屏就往下调.如果想白屏就往上调.
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/07/647841e4d3e7eebbd97d05377498659e)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/07/fa7ee57d744c4386c61b9fca2f4f4166)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/07/7902419ffaabcf13acba6b4830a493a2)
4. 最后游戏里面淡入淡入就修改材质的Float1这个值就ok了.多的就不说啦. 祝大家看的开心 玩的愉快..bye bye~
附带源码: http://download.csdn.net/detail/spiritring/6781673
顶
关于这种处理用shader配合Material非常简单的.先来介绍下使用了哪些东东.
1.肯定是需要一个脚本的.本人用的C#.当然JS也是可以的. 需要把脚本bind到主摄像机..因为我们需要重载Camera的OnRenderImage借此来获得屏幕的sampler2D(就是屏幕截图吧可以这么理解 shader里面sampler2D就是一个texcood)
[csharp] view
plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
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
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
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
顶
相关文章推荐
- Unity3D特效-场景淡入淡出
- Unity3D特效-场景淡入淡出
- Unity3D特效-场景淡入淡出
- Unity3D 4.61 实现淡入淡出的场景过渡方法。
- Cocos2dx-3.x中常用切换场景特效和方式
- 【Unity3D】学习笔记(第3记) 2D游戏开发基本技巧之场景切换(Javascript)
- 【Cocos2D-X 游戏引擎】初窥门径(2) 场景的切换及特效
- Unity3D 批处理场景的工具
- Unity3D 多人协作开发 环境搭建 笔记(场景合并)
- Unity3D 屏幕空间雪场景Shader渲染
- 【Cocos2D-X 游戏引擎】初窥门径(2) 场景的切换及特效
- 场景切换特效
- Unity3D-UGUI特效之Image的流光、扫光效果
- Unity3d-UGUI特效之Image的Skew变形、倾斜效果
- Cocos2d-x中的场景切换特效以及新版接口特性
- unity3d 动态添加模型到场景中
- Unity3d中制作Loading场景进度条所遇到的问题
- [Unity3D]无缝场景切换解决方案 - 简单场景切换
- unity3d,异步加载场景
- unity3d 场景配置文件生成代码