[UnityShader]unity中2D Sprite显示阴影和接受阴影
首先是效果

要让2D显示阴影,首先假设知道Unity阴影来源(shader中的ShadowCaster)
最简单的方法是,首先从官网下载Sprite-Default.Shader,查看源码
然后复制粘贴到自己的Shader中,结尾加上一句FallBack "VertexLit",此时已经拥有投射阴影的能力了
(复制代码保存到Shader中)
1 // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
2
3 Shader "Custom/2DShadow"
4 {
5 Properties
6 {
7 [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
8 _Color ("Tint", Color) = (1,1,1,1)
9 [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
10 [HideInInspector] _RendererColor ("RendererColor", Color) = (1,1,1,1)
11 [HideInInspector] _Flip ("Flip", Vector) = (1,1,1,1)
12 [PerRendererData] _AlphaTex ("External Alpha", 2D) = "white" {}
13 [PerRendererData] _EnableExternalAlpha ("Enable External Alpha", Float) = 0
14 }
15
16 SubShader
17 {
18 Tags
19 {
20 "Queue"="Transparent"
21 "IgnoreProjector"="True"
22 "RenderType"="Transparent"
23 "PreviewType"="Plane"
24 "CanUseSpriteAtlas"="True"
25 }
26
27 Cull Off
28 Lighting Off
29 ZWrite Off
30 Blend One OneMinusSrcAlpha
31
32 Pass
33 {
34 CGPROGRAM
35 #pragma vertex SpriteVert
36 #pragma fragment SpriteFrag
37 #pragma target 2.0
38 #pragma multi_compile_instancing
39 #pragma multi_compile_local _ PIXELSNAP_ON
40 #pragma multi_compile _ ETC1_EXTERNAL_ALPHA
41 #include "UnitySprites.cginc"
42 ENDCG
43 }
44 }
45
46 FallBack "VertexLit" //上面都是默认代码,只加了这一句,原因可以看看<UnityShader入门精要>,有讲Unity阴影原理
47 }
但是SpriteRnderer的receiveShadows属性和shadowCastingMode属性是隐藏的(可以写编辑器扩展暴露出来)在代码中打开即可,挂上脚本,运行游戏便可以看到效果
1 void Awake()
2 {
3 transform.GetComponent<SpriteRenderer>().receiveShadows = true;
4 transform.GetComponent<SpriteRenderer>().shadowCastingMode = ShadowCastingMode.TwoSided;
5 }
更新:要让Sprite接受投影
有新的需求要求Sprite能接受投影,那么上面这套就不适用了,因为Queue为Transparent时是收不到投影的
直接将Shader替换为Legacy Shaders/Transparent/Cutout/Diffuse,这是利用内置的透明度测试来达成所想要的效果
关于透明度测试可以看看<UnityShader 入门精要>,大概意思就是Alpha低于设定值,则直接丢弃不渲染
[UnityShader]unity中2D Sprite显示阴影和接受阴影的更多相关文章
- Unity中2D和UGUI图集的理解与使用
图集 什么是图集? 在使用3D技术开发2D游戏或制作UI时(即使用GPU绘制),都会使用到图集,而使用CPU渲染的2D游戏和UI则不存在图集这个概念(比如Flash的原生显示列表),那么什么是图集呢? ...
- Unity之2D Sprite Outline外轮廓效果
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity5.3.8f1 Unity提供了2D Object Sprite对象,但是没有提供外轮廓Outline效果的支持 ...
- 【Unity3D基础教程】给初学者看的Unity教程(三):通过制作Flappy Bird了解Native 2D中的Sprite,Animation
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 上一次我们讲了MonoBehaviou ...
- 【转】通过制作Flappy Bird了解Native 2D中的Sprite,Animation
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 上一次我们讲了MonoBehaviou ...
- boostrap中模态框显示在阴影之下
boostrap中模态框显示在阴影之下 出现这种情况的原因我开始也搞了很久,问题出现在哪里呢? 有事问百度,在百度上查了一下资料,他们主要的解决办法:是 修改标签的z-index属性的值, 我试着改了 ...
- 在Unity中实现屏幕空间阴影(1)
接着上篇文章,我们实现了SSR效果. 其中的在屏幕空间进行光线追踪的方法是通用的.借此我们再实现一种屏幕空间的效果,即屏幕空间阴影. 文中的图片来自Catlike coding http://catl ...
- Unity中调用Windows窗口句柄以及根据需求设置并且解决扩展屏窗体显示错乱/位置错误的Bug
问题背景: 现在在搞PC端应用开发,我们开发中需要调用系统的窗口以及需要最大化最小化,缩放窗口拖拽窗口,以及设置窗口位置,去边框等功能 解决根据: 使用user32.dll解决 具体功能: Unity ...
- 【unity shaders】:Unity中的Shader及其基本框架
shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...
- Unity中简单使用Opengl
简介 由于项目特殊需求,需要在unity中使用一些OpenGL的东西来绘制图形(PS:其实就是有一个拖尾算法只有OpenGL版本~~~懒得改了,直接在unity中使用OpenGL算了).所以琢磨咯下如 ...
- 关于Unity中的NGUI和UGUI
一.用Unity开发2D游戏,有三套关系 1.GUI:Unity本身自带的GUI 2.NGUI:以前在Unity中广泛来做2D的,是第三方的包,需要安装 3.UGUI:Unity5.X后(其实是Uni ...
随机推荐
- Linux利用crontab执行定时任务
Linux利用crontab执行定时任务 crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认 ...
- mysql 复制数据
1.表存在 insert into table_name(key1,key2) select key3,key4 from table_name_2; 2.表不存在 create table test ...
- 为测试管理正名,华为云CodeArts TestPlan的守护之道
摘要:华为云CodeArts TestPlan既有公有云版本,也有下沉到私有云的版本. 本文分享自华为云社区<为测试管理正名,华为云CodeArts TestPlan的守护之道>,作者:云 ...
- 简述HashSet的扩容机制以及我们在重写equals()的时候为何会重写hashcode()
简述HashSet的扩容机制以及我们在重写equals()的时候为何会重写hashcode() 摘要:在背面试知识点的时候存在这样一条著名的面试题:我们重写equals()的时候为什么要重写has ...
- 轻松解决 CSS 代码都在一行的问题
前言 最近在做博客园的界面美化,用的是博客园[guangzan]的开源项目,配置超级简单,只需要复制粘贴代码就好啦. 但在粘贴 CSS 代码时遇到一个问题,那就是所有代码都挤在了一行,没有一点排板的样 ...
- jQuery查找标签、操作标签、事件和动画效果,Bootstrap页面框架的介绍和使用讲解
今日内容 jQuery查找标签 1.基本选择器: $('#d1') id选择器 $('.c1') class选择器 $('div') 标签选择器 2.组合选择器: $('div#d1') 查找id是d ...
- github下载后的文件,winrar打开中文是乱码
是因为编码问题,通过7Z解压后正常
- 序列化框架-Kyro简述
网上有很多资料说 Kryo 只能在 Java 上使用,这点是不对的,事实上除 Java 外,Scala 和 Kotlin 这些基于 JVM 的语言同样可以使用 Kryo 实现序列化. 1.使用方法 ( ...
- 真正“搞”懂HTTPS协议18之TLS特性解析
上一篇,我们讲了TLS的握手过程,我们参照的版本其实是TLS1.2.这个协议是2008年的老协议了,虽然它的价值不言而喻,但是毕竟年纪大了,不太能跟得上时代了.所以,经历了诸多磨难的TLS1.3在20 ...
- 《价值流动-Project To Product》读后感
背景:2022年8月,在这家公司已经任职满两年.这两年我最大的成就就是基于Scrum模式推行了敏捷项目管理,并取得了一定的成果.但是,在推行了两年后新的问题也产生了.例如: 1,项目管理上,项目经理缺 ...