• Unity3D特效-场景淡入淡出


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

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

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

    [csharp] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    1. using UnityEngine;  
    2. using System.Collections;  
    3.   
    4. public class Test1 : MonoBehaviour {  
    5.     public Material ma;  
    6.     //初始化  
    7.     void Start () {  
    8.         ma = new Material(Shader.Find("Custom/Test3")); //创建一个材质  
    9.     }  
    10.   
    11.     //这允许你使用基于shader的过滤器来处理最后的图片,  
    12.     //进入的图片是source渲染纹理,结果是destination渲染纹理。  
    13.     void OnRenderImage (RenderTexture source,  RenderTexture destination) {  
    14.         //拷贝源纹理到目的渲染纹理。这主要是用于实现图像效果。  
    15.         //Blit设置dest到激活的渲染纹理,在材质上设置source作为  
    16.         //_MainTex属性,并且绘制一个全屏方块。  
    17.         Graphics.Blit(source, destination, ma);   
    18.     }  
    19. }  


    2.如果需要控制淡入淡出.就要使用材质的SetXXX接口来设置Shader的Uniform.Shader的源码如下:

    [plain] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    1. Shader "Custom/Test3" {  
    2.     Properties {  
    3.         _MainTex ("Base (RGB)", 2D) = "white" {}  
    4.         _Float1("Float1",Float) = 0.0  
    5.     }  
    6.   
    7.     SubShader {  
    8.         Pass {  
    9.             CGPROGRAM  
    10.   
    11.             #pragma vertex vert  
    12.             #pragma fragment frag  
    13.   
    14.             uniform sampler2D _MainTex;  
    15.             uniform float _Float1;   
    16.               
    17.             struct Input {  
    18.                 float4 pos : POSITION;  
    19.                 float2 uv : TEXCOORD0;  
    20.             };  
    21.   
    22.             struct v2f {  
    23.                 float4 pos : POSITION;  
    24.                 float2 uv : TEXCOORD0;  
    25.             };  
    26.   
    27.             v2f vert( Input i) {  
    28.                 v2f o;  
    29.                 o.pos = mul (UNITY_MATRIX_MVP, i.pos);  
    30.                 o.uv = i.uv;  
    31.                 return o;  
    32.             }  
    33.   
    34.             float4 frag (v2f i) : COLOR {              
    35.                 float4 outColor;                  
    36.                 outColor = tex2D( _MainTex, i.uv) + _Float1;  
    37.                 return outColor;  
    38.             }  
    39.             ENDCG  
    40.         }  
    41.     }  
    42.     Fallback off  
    43. }  

    3. 在材质中可以看到 Float1这个Float值.改变其值就会看到整个画面明显的变化.如果想黑屏就往下调.如果想白屏就往上调.



    4. 最后游戏里面淡入淡入就修改材质的Float1这个值就ok了.多的就不说啦. 祝大家看的开心 玩的愉快..bye bye~

    附带源码: http://download.csdn.net/detail/spiritring/6781673

  • 相关阅读:
    结对作业——WordCount进阶版
    个人作业2——WordCount
    软工网络16个人作业1
    request内置对象在JSP
    Servlet处理表单
    Web-JSP表单字符验证
    201621123037 《Java程序设计》第14周学习总结
    201621123037 《Java程序设计》第13周学习总结
    转载 写了 35 年代码的老程序员的最大遗憾
    设计OA系统的用户-角色-权限分配
  • 原文地址:https://www.cnblogs.com/android-blogs/p/6101337.html
Copyright © 2020-2023  润新知