unity-shader 2D - Sprite 影子
前言
今天我们来实现一个比较简单实用的shader特效 - 2D Sprite影子效果
最终效果:
准备工作:
打开unity新建一个2D场景,导入一张2D人物图片和一张透明的图片(用来接收影子),修改图片Texture Type为 Sprite 类型,
拖入2D人物精灵图到场景,然后拖拽透明图到人物精灵图节点下,命名为shadow,用来接收影子
然后新建一个材质球,拖拽到 shadow 节点上,shader选择我们将要新建的shadow.shader。
场景如下:
实现思路:
其实很简单,就是把人物的纹理传递给shadow shader, 把alpha值大于0的像素的rgb变为黑色即可。
shader:
// ---------------------------【2D Sprite 影子】---------------------------
Shader "lcl/shader2D/playerShadow"
{// ---------------------------【子着色器】---------------------------SubShader{// No culling or depthCull Off ZWrite Off ZTest Always// 开启透明度Blend SrcAlpha OneMinusSrcAlpha// 设置渲染队列Tags { "Queue"="Transparent" "RenderType"="Opaque" }// ---------------------------【通道一】---------------------------Pass{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 = UnityObjectToClipPos(v.vertex);o.uv = v.uv;o.uv.y = 1 - o.uv.y;return o;}//通过c#获取到人物纹理传递过来sampler2D _PlayerTex;// 片元着色获取fixed4 frag (v2f i) : SV_Target{// 采样传过来的纹理fixed4 col = tex2D(_PlayerTex, i.uv);// 这里用step代替if// 当 透明度值大于1时, 就呈现黑色(即影子)col.rgb = 1 - step(0,col.a);return col;}ENDCG}}
}
c#:
using UnityEngine;
public class playerShadow : MonoBehaviour {public GameObject shadow;void Start () {if (!shadow) {return;}// 获取纹理并传递到shadervar shadowMat = shadow.GetComponent<SpriteRenderer> ().material;var playerTex = GetComponent<SpriteRenderer> ().sprite.texture;shadowMat.SetTexture ("_PlayerTex", playerTex);}
}
最后把c#脚本拖拽到人物节点上,把shadow拖拽到shadow变量上,点击运行即可
最终效果:
unity-shader 2D - Sprite 影子相关推荐
- Unity Shader 2D水流效果
水流的模拟主要运用了顶点变换和纹理动画的结合: 顶点变换中,利用正弦函数模拟河流的大致形态,例如波长,振幅等. 纹理动画中,将纹理坐标朝某一方向持续滚动以形成流动的效果. 脚本如下: 1 Shader ...
- unity shader 2D火焰流动特效
效果图: /* *author:maki 火焰流动效果 */ Shader "Custom/FireLiner" {Properties{_Albedo("Albedo& ...
- 2d shader unity 阴影_【Unity Shader】平面阴影(Planar Shadow)
来介绍一种适用于移动平台的高性能实时阴影解决方案--平面阴影(Planar Shadow). 由于Unity内置的实时阴影实现方式是屏幕空间阴影贴图(Screen Space Shadow Map)非 ...
- Unity九宫格切割图片 2D Sprite
1.安装 2D Sprite 在unity中 Window–>Package Manager–>搜索框输入 2D Sprite -->Package Manager左上角的Packa ...
- Unity报错之 No Sprite Editor Window registered. Please download 2D Sprite package from Package Manager.
Unity报错之 No Sprite Editor Window registered. Please download 2D Sprite package from Package Manager. ...
- 2022-04-30 Unity核心2——Sprite
文章目录 一.Single 图片编辑 二.Multiple 图片编辑 三.Polygon 多边形编辑 四.Sprite Renderer 精灵渲染器 五.Sprite Creator 精灵创造者 六. ...
- unity shader入门精要_Unity Shader 入门(二):shader 基础
一.参考与说明(需要写在开始东西): 1.1 Unity Shader 入门精要学习 https://github.com/candycat1992/Unity_Shaders_Book/tree/u ...
- Unity Shader中各部分定义内容详解
Unity Shader中各部分定义内容详解 样板 Shader "Practice/Unlit/SimpleUnlit" {Properties{_MainTex (" ...
- Unity Shader基础
ShaderLab 在unity中,所有的unity shader都是使用shaderlab来编写的.Shaderlab是unity提供的编写unity shader的一种说明性的语言. Unity ...
最新文章
- 10年以后,Google Labs再次回归!VR部门负责人任新leader
- 【转】android-修改TextView中部分文字的颜色
- linux中ps aux和ps -ef下显示的意义
- 什么是JSON处理(JSON-P API)?
- SqlServer中dateTime、dateTime2、date、datetimeoffset的区别
- java in thread main_JAVA报错:Exception in thread main……求帮助?
- JavaFX加载界面报错:fxcontroller can only be applied to root element?
- 【注意力机制】SENet(Squeeze-and-Excitation Networks)详解
- Python——高阶函数
- ArcGIS 计算挖填方区域和挖填方量
- 制作LINUX安装DEB,脚本中的函数报错怎么办?
- RocketMQ(一)RocketMQ介绍及核心概念
- 联想m7216更换墨粉流程图_联想m7216复印机说明书 联想复印机怎样更换墨粉
- 模型机CPU设计——ALU函数发生器(6)
- 代码审查工具FxCop建议采用的规则总结
- c罗说什么语言,那些年属于C罗的经典语录,那一句话最感动你?
- 华为matebook笔记本鸿蒙,聊聊鸿蒙对笔记本电脑行业的影响
- 一个有趣的 5 X 5 方阵一笔画问题
- ebs 供应商地点信息_EBS R12使用接口表往已存在的供应商地址下创建新的地点
- 采购申请、采购订单、供应商