Unity场景切换过度效果(Shader)

    xiaoxiao2021-03-25  104

    切换场景,我们需要屏幕白到黑,一般来说,在相机前面加个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 }

    转载请注明原文地址: https://ju.6miu.com/read-21077.html

    最新回复(0)