• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

Unity Shader场景切换过度效果完成

原创内容,转载请注明原文网址: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