unity实现流光效果

本文实例为大家分享了unity实现流光效果的具体代码,供大家参考,具体内容如下

1.通过一些简单效果可以让我们更好的去理解shader,具体都在代码注释中:

Shader "Unlit/MoveLightImage"
{
 Properties
 {
 //主纹理
 _MainTex ("Texture", 2D) = "white" {}
 //灯光纹理
 _LightTex("Light Texture",2D)="white"{}
 //遮罩纹理
 _MaskTex("Mask Texture",2D)="white"{}
 }
 SubShader
 {
 Tags {"Queue"="Transparent" "RenderType"="Transparent" }
 LOD 100
 //透明混合
 Blend SrcAlpha OneMinusSrcAlpha

 Pass
 {
 CGPROGRAM
 #pragma vertex vert
 #pragma fragment frag
 // make fog work
 #pragma multi_compile_fog

 #include "UnityCG.cginc"

 struct appdata
 {
 float4 vertex : POSITION;
 float2 uv : TEXCOORD0;
 };

 struct v2f
 {
 float2 uv : TEXCOORD0;
 UNITY_FOG_COORDS(1)
 float4 vertex : SV_POSITION;
 };

 sampler2D _MainTex;
 float4 _MainTex_ST;
 sampler2D _LightTex;
 sampler2D _MaskTex;
 fixed4 _Color;

 v2f vert (appdata v)
 {
 v2f o;
 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
 o.uv = TRANSFORM_TEX(v.uv, _MainTex);
 UNITY_TRANSFER_FOG(o,o.vertex);
 return o;
 }

 fixed4 frag (v2f i) : SV_Target
 {
 //灯光贴图 取一半UV
 float2 uv=i.uv*0.5;
 //不断改变uv的x轴,让他往x轴方向移动,_Time为shader的时间函数,会一直执行
 uv.x+=-_Time.y*0.4;
 //取灯光贴图的alpha值,黑色为0,白色为1
 fixed lightTexA=tex2D(_LightTex,uv).a;
 //获取遮罩贴图的alpha值,黑色为0,白色为1 这里的uv和上面的uv是调用的不一样的函数
 fixed maskA=tex2D(_MaskTex,i.uv).a;

 //主纹理+灯光贴图*遮罩贴图 简单原理任何数*0为0 这样就避免了遮罩外出现不协调灯光贴图
 fixed4 col = tex2D(_MainTex, i.uv)+lightTexA*maskA*0.6;
 // apply fog
 UNITY_APPLY_FOG(i.fogCoord, col);
 return col;
 }
 ENDCG
 }
 }
}

2.材质参数:

3.效果展示

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity3D Shader实现流光效果

    本文实例为大家分享了Unity3D Shader实现流光效果的具体代码,供大家参考,具体内容如下 流光效果图: 演示工程:下载地址 //功能需求:模拟数据传送效果,高亮色块从模型上方移动到下方 //功能分析:这里采用UV动画的方式来实现,利用Alpha贴图控制流动的形状 // 利用Alpha遮罩贴图,控制模型中哪些地方需要进行流动 Shader "Custom/DataFlowEffect" { Properties { _MainColor("Main Color"

  • unity实现流光效果

    本文实例为大家分享了unity实现流光效果的具体代码,供大家参考,具体内容如下 1.通过一些简单效果可以让我们更好的去理解shader,具体都在代码注释中: Shader "Unlit/MoveLightImage" { Properties { //主纹理 _MainTex ("Texture", 2D) = "white" {} //灯光纹理 _LightTex("Light Texture",2D)="whit

  • unity实现玻璃效果

    本文实例为大家分享了unity实现玻璃效果的具体代码,供大家参考,具体内容如下 一.使用Cubemap,做一个假反射 shader代码如下: Shader "Custom/glassShader" { Properties { _MainColor("Main Color",Color)=(1,1,1,1) _MainTex ("Base (RGB)", 2D) = "white" {} _Cube("Cube&qu

  • Unity实现喷漆效果

    本文实例为大家分享了Unity实现喷漆效果展示的具体代码,供大家参考,具体内容如下 喷漆功能 **应用场景:**如墙上的标语贴花,汽车上的喷漆等. 选择方案: 1.当然实现方法各式各异,最最最简单,也是最"不堪入目"的方法是直接给一个面片,然后获取喷漆位置,加上一个要喷漆表面法线方向的偏移,作为最终面片放置位置,当然,不要忘了设置面片的方向.这种方法虽然说简单,但是效果并不理想,会出经常现与其他物体穿插的情况,如果游戏中曲面太多,那么这个方案基本没法看. 2.对于个别特殊的需求来讲,比

  • Unity实现瞄准镜效果

    本文实例为大家分享了Unity实现瞄准镜效果的具体代码,供大家参考,具体内容如下 using UnityEngine; using System.Collections; public class TelesopicView : MonoBehaviour { public float zoomLevel = 2.0f; public float zoomInSpeed = 100.0f; public float zoomOutSpeed = 100.0f; private float ini

  • Unity 实现贴花效果的制作教程

    目录 一.前言 二.实现方式介绍 三.实现过程 检测UV位置并替换像素颜色: 修改替换信息为图片信息: 运行时使用复制贴图: 修改帧检测断触问题: 总结 一.前言 在云艾尔登法环时,看到地面上的血迹时,发现某些地方脱离的地面,似乎是通过面片的方式实现的效果.但是同时某些,不过这种类型的血迹有道具的效果,估计是为了实现碰撞检测的功能才选择了面片的方式 而其他的战斗痕迹的效果似乎是通过贴花来实现的,贴花的方式多种多样.而在Unity中,有一种给官方文档提供代码的解决方案.这里就在这些代码的基础上做一

  • unity制作瞄准镜效果

    使用unity制作瞄准镜,供大家参考,具体内容如下 一.创建场景 在Hierarchy窗口中使用Plane和Cube创建场景,并调整摄像机位置 二.使用步骤 1.在Hierarchy窗口中右击在UI中选择Image 2.将瞄准镜素材拖入Image的检视试图中Soure Image中 结果如下: (注意在导入图片时将图片类型更改为下图所示,更改完之后点击Apply) 3.调整瞄准镜位置 三.新建代码 代码如下(示例): using UnityEngine; using System.Collect

  • Unity实现跑马灯效果的示例代码

    目录 一.效果 二.需要动画插件DOTween 三.脚本 1.每个格子上的脚本文件 2.管理脚本文件 一.效果 二.需要动画插件DOTween 下载地址 三.脚本 1.每个格子上的脚本文件 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; public class MarqueeUIItem : MonoBe

  • 详解Unity安卓共享纹理

    概述 本文的目的是实现以下的流程: Android/iOS native app 操作摄像头 -> 获取视频流数据 -> 人脸检测或美颜 -> 传输给 Unity 渲染 -> Unity做出更多的效果(滤镜/粒子) 简单通信 在之前的博客里已经说到,Unity 和安卓通信最简单的方法是用 UnitySendMessage 等 API 实现. Android调用Unity: //向unity发消息 UnityPlayer.UnitySendMessage("Main Cam

  • 详解Unity使用ParticleSystem粒子系统模拟药水在血管中流动(粒子碰撞)

    一.前言 点关注不迷路,持续输出Unity干货文章. 嗨,大家好,我是新发. 之前我写了一篇Unity流体模拟的文章:<Unity流体模拟,支持粒子系统,支持流体碰撞交互(Obi Fluid插件使用教程)> 然后有同学私信我,问我能否做药剂打入血管的效果. 这个嘛,用ObiFluid可以做,不过我今天要尝试的,是用另一种方式:直接使用Unity的粒子系统来做. 二.最终效果 最终效果如下,效果虽然一般,不过制相对简单很多. 本文Demo工程已上传到CodeChina,感兴趣的同学可自行下载学习

随机推荐