原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2019/0329/430.html
Unity Shader场景切换过度效果完成
切换场景,我们需求屏幕呈现白到黑的过渡效果,普通来说,在相机前面加个Image,控制他的透明度就好了。固然这种办法能够做到,但是可能之后会有各种小问题,为此常州网站开发建设下面就给大家引见下的Shader办法来完成场景切换过度效果。脚本直接挂在相机上,相关代码如下:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using DG.Tweening;
public class test : MonoBehaviour
{
public Material ma;
float count;
public bool SetWhiteBool = false;
public bool SetBlackBool = false;
public float ChangeTime = 0.3f;
// Use this for initialization
void Start()
{
if(ma==null)
{
ma = new Material(Shader.Find("MyShader/BlackScreen"));
}
}
// Update is called once per frame
void Update()
{
if (SetWhiteBool)
{
SetWhite();
}
else if (SetBlackBool)
{
SetBlack();
}
}
void OnRenderImage(RenderTexture source, RenderTexture destination)
{
//拷贝源纹理到目的渲染纹理。这主要是用于完成图像效果。
//Blit设置dest到激活的渲染纹理,在材质上设置source作为
//_MainTex属性,并且游戏开发运营绘制一个全屏方块。
Graphics.Blit(source, destination, ma);
}
void SetWhite()
{
count = ma.GetFloat("_Float1") + ChangeTime * Time.deltaTime;
ma.SetFloat("_Float1", count);
if (ma.GetFloat("_Float1") >= 1)
{
SetWhiteBool = false;
}
}
void SetBlack()
{
count = ma.GetFloat("_Float1") - ChangeTime * Time.deltaTime;
ma.SetFloat("_Float1", count);
if (ma.GetFloat("_Float1") <= 0)
{
SetBlackBool = false;
}
}
}
shader代码:
Shader "MyShader/BlackScreen" {
Properties
{
_Color("Main Color", Color) = (1,1,1,1)
_Float1("改动颜色",Range(0,1)) = 1.0
_MainTex("Base (RGB)", 2D) = "white" {}
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert_img //vert_img在UnityCG.cginc里有预定义的函数体,是最普通的顶点处置函数
#pragma fragment frag
#include "UnityCG.cginc"
fixed4 _Color;
sampler2D _MainTex; //这两个变量一定要在CGPROGRAM中定义一次,不要看Properties里有就不写了
float1 _Float1;
float4 frag(v2f_img i) : COLOR
{
float4 col = tex2D(_MainTex, i.uv) * _Float1; //简单的两个float4点乘,刚好乘白色不变,乘纯黑就黑透,不一定是纯线性关系但表现效果没问题
return col;
}
ENDCG
}
}
Fallback off
}
上篇:上一篇:常州手游开发-Unity截屏
下篇:下一篇:Spine动画导入COCOS2d和UNITY