一、前言

本文使用版本为Unity5.3.3,两种实现方法得到的效果是一样的,侧重点不一样,择其良者而用之。

尊重原创,转载请注明出处凯尔八阿哥专栏

二、第一种方案

1、效果图如图所示

2、制作步骤

首先是C#脚本部分,前面的几章基础篇里面已经提到过这个脚本了,代码如下:

using UnityEngine;
using System.Collections;public class OVRScreenFade2 : MonoBehaviour
{[SerializeField]private Material m_Material;// Use this for initializationvoid Start(){}// Update is called once per framevoid Update(){}void OnRenderImage(RenderTexture src, RenderTexture dest){Graphics.Blit(src, dest, m_Material);}
}

这个脚本可以直接将材质中的效果渲染到屏幕的最上层中,也就是说,材质中的效果是最前端的。这样用在VR程序中也可以实现屏幕的渐变暗的效果,实现一些场景的转换时候的过渡效果。

Shader部分其实非常简单,返回一个随着时间变换的黑色即可以,代码如下:

Shader "UnityCg/OVRScreenFade2"
{Properties{_MainTex("Texture", 2D) = "white" {}}SubShader{// No culling or depthCull Off ZWrite On ZTest AlwaysPass{CGPROGRAM
#pragma vertex vert
#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};v2f vert(appdata v){v2f o;o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);o.uv = v.uv;return o;}uniform float _Timer;uniform sampler2D _MainTex;fixed4 frag(v2f i) : SV_Target{fixed4 col = tex2D(_MainTex, i.uv);fixed4 black = 1 - fixed4(_Time.yyy / 2, 1);col *= black;return col;}ENDCG}}
}

将上面的C#脚本赋给主摄像机,并将附有上述Shader的材质赋给脚本中的“m_Material”变量
三、第二种方案

1、效果图如图所示

2、这个方法的Shader部分相比来说更加的简单,代码如下:

Shader "Unlit/OVRScreenFade"
{Properties{_Color("Color", Color) = (0,0,0,1)}SubShader{Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Opaque" }LOD 100ZWrite OffBlend SrcAlpha OneMinusSrcAlphaColor[_Color]Pass{}}
}

3、主要部分在C#脚本,脚本中通过代码来添加Pass块实现渲染的部分,并通过GL类进行最终的绘制,代码如下:

using UnityEngine;
using System.Collections;public class OVRScreenFade : MonoBehaviour {public float fadeTime = 2.0f;public Color fadeColor = new Color(0.01f, 0.01f, 0.01f, 1.0f);private Material fadeMaterial = null;private bool isFading = false;private YieldInstruction fadeInstruction = new WaitForEndOfFrame();void Awake(){fadeMaterial = new Material(Shader.Find("Unlit/OVRScreenFade"));}void OnEnable(){StartCoroutine(FadeIn());}void OnLevelWasLoaded(int level){StartCoroutine(FadeIn());}void OnDestroy(){if (fadeMaterial != null){Destroy(fadeMaterial);}}IEnumerator FadeIn(){float elapsedTime = 0.0f;fadeMaterial.color = fadeColor;Color color = fadeColor;isFading = true;while (elapsedTime < fadeTime){yield return fadeInstruction;elapsedTime += Time.deltaTime;color.a = 1.0f - Mathf.Clamp01(elapsedTime / fadeTime);fadeMaterial.color = color;}isFading = false;}void OnPostRender(){if (isFading){fadeMaterial.SetPass(0);GL.PushMatrix();GL.LoadOrtho();GL.Color(fadeMaterial.color);GL.Begin(GL.QUADS);GL.Vertex3(0f, 0f, -12f);GL.Vertex3(0f, 1f, -12f);GL.Vertex3(1f, 1f, -12f);GL.Vertex3(1f, 0f, -12f);GL.End();GL.PopMatrix();}}
}

同样的将这个C#脚本赋给主摄像机就可以,在控制面板上改变颜色可以实现不同的渐变屏幕色效果。

UnityShader案例篇—屏幕渐暗效果相关推荐

  1. UnityShader案例篇—旋转、平移和缩放

    一.前言 在Unity中通过控制物体的Transform可以很容易的对物体进行旋转.平移和缩放,得到一些简单的动画效果.但是有个不好的地方是,一旦这个物体上有碰撞体的话,会跟环境发生碰撞.我就就想能不 ...

  2. UnityShader案例篇—角色动态地面印记

    一.介绍 本篇要介绍的效果如图所示:角色在地形上行走,地形上始终会有一个动态圆环跟随角色,类似于阴影的一个效果.但是这个 "阴影"是我们可以自己控制它的效果的,如图2所示是通过修改 ...

  3. UnityShader案例篇-镜子2

    一.前言 上一篇介绍了有关镜子的制作,有关理论部分的内容我会在后续相关的文章中陆续介绍,莫急,我先趁着自己脑子还是对此技术比较热,趁热打铁尽早把实现部分先写出来.上一章的介绍制作的镜子其实只是一个取巧 ...

  4. UnityShader案例篇—绘制雨滴

    一.前言 转载请注明出处凯尔八阿哥专栏 惯例先上效果图,本文不只是简单的绘制雨滴,同时处理了摄像机不同朝向看到的雨滴下落的方向也不一样. 二.方法 1.绘制雨线:绘制雨使用的是C#脚本绘制的,脚本为: ...

  5. UnityShader案例篇-镜子1

    废话不多说先上效果图,我使用的是在Unity5.3.3版本. 一.原理 1.首先要准备的素材是三个,对没错,就是三个因为镜子里面的那个物体其实是实物的复制体而已:一个Plane作为镜子,还有一个实物和 ...

  6. unity使用协程简单实现渐明渐暗的过渡效果

    一.前言 在游戏中,经常遇到不同关卡,不同场景之间的过渡,而渐明渐暗则是其中一种比较简单自然的过渡效果,本文则是介绍如何用协程实现此效果. 二.原理 控制图片的不透明度实现渐明渐暗 使用协程可以在我们 ...

  7. Unity实现屏幕淡入淡出效果

    预期效果:为实现在进入新场景时的淡入淡出效果 编译器版本:2021.3.19f1c1 使用组件:UI --> RawImage 在Unity场景切换的时候,使用RawImage制作场景的淡入淡出 ...

  8. swiper叠加轮播效果 (含源码) - 案例篇

    swiper叠加轮播效果(含源码) - 效果图 效果图: 图片素材来源于网络. [swiper 源码效果 · 对比地址] 代码: <!DOCTYPE html> <html lang ...

  9. bootstrapV4.6.0 - 导航栏开发 (案例篇)

    bootstrapV4.6.0 - 导航栏开发 (案例篇) 经验点: 导航栏背景色 ((全window宽度)); 导航栏字体大小设置: 导航栏背景色设置: 导航栏下拉菜单的下拉效果(click改为ho ...

最新文章

  1. VTK修炼之道44:图形进阶_vtkPolyData数据源讨论与数据创建
  2. 复现经典:《统计学习方法》第 9 章 EM 算法及其推广
  3. CodeForces - 246E Blood Cousins Return(树上启发式合并)
  4. 参数php_干净的PHP代码-函数参数
  5. xdpyinfo命令找不到_无法使用命令 /usr/bin/xdpyinfo 自动检查显示器颜色。
  6. php查询oracle大量数据,Oracle 百万行数据查询优化
  7. [react] react是哪个公司开发的?
  8. oracle升级后报 06502,Oracle数据库升级后报ORA-00704和ORA-39700错误
  9. mysql 文本处理函数,MySQL常用的文本处理函数
  10. 孙鑫VC学习笔记:第十三讲 (六) 关于释放内存
  11. 25条实用简洁的Python代码
  12. 实训笔记20190807--数据分析
  13. 基于XSSFWorkbook 实现POI设置指定列为文本格式
  14. 渗透基础学习-信息搜集
  15. 盘点视频剪辑几个场景和技巧分享
  16. 怎样理解心藏神,肝藏魂,脾藏意,肺藏魄,肾藏精志?
  17. 【逐梦云服务平台研究之redis启动】
  18. JVM堆内存介绍、垃圾收集算法、垃圾回收器汇总
  19. 鞍山市电子计算机学校,鞍山市信息工程学校
  20. Redis常用数据类型Set集合

热门文章

  1. Python-Serial 串口助手的接收读取数据
  2. 慧荣 SM3257ENLT - ISP 131112-AA量产
  3. 天融信资料下载官方FTP服务器
  4. 什么是深度学习(Deep Learning)
  5. 《计算机软件测试规范》学习记录
  6. day08-代码操作xls文件
  7. Ceph测试系列(三):Ceph集群(3 osd节点)dd及rados bench 性能测试
  8. ORB_SLAM错误总结
  9. 《哈迪斯:杀出地狱》:超爽的地狱逃生之旅
  10. 矩阵运算实现求样本与样本之间欧式距离