首先是效果

要让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 }

但是SpriteRndererreceiveShadows属性和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低于设定值,则直接丢弃不渲染

最新文章

  1. 不一样的猜数字游戏 — leetcode 375. Guess Number Higher or Lower II
  2. mysql整数字段 int bigint smallint tinyint
  3. 如何用css画出三角形
  4. Effective C++ -----条款38:通过复合塑模出has-a或“根据某物实现出”
  5. python学习应用笔记(一)
  6. IE10 下兼容性问题
  7. (转载)Cocos2dx-OpenGL ES2.0教程:编写自己的shader(2)
  8. yii2的安装
  9. 那些年,我们一起被坑的H5音频
  10. sql 参数
  11. hdu4393 Throw nails(只用模拟前面500来次,后面根据速度、位置、id值排序即可)
  12. OData.NET已在 GitHub上开源
  13. gridcontrol datatemplate trigger
  14. 排序 之 快排、归并、插入 - &lt;时间复杂度&gt;----掌握思想和过程
  15. SVN与Git
  16. 利用post请求发送内容进行爬虫
  17. VS Code调试.Net Core版Hello World
  18. 表单提交 fastadmin form
  19. FormData的使用
  20. SWT中ole/activex实践--操作word的一个例子

热门文章

  1. Python AI小项目打包通关:Pyinstaller和Wix都用上了
  2. WPF 自定义附加事件
  3. APIO2022 游记
  4. .Net 7 被Microsoft的开源免费PowerToys工具独立附带
  5. cmd/批处理常用命令
  6. React中实现keepalive组件缓存效果
  7. Java反射获取方法参数名 IDEA配置 Maven
  8. 一个关于sum over的疑问
  9. 结构型模式 - 桥接模式Bridge
  10. Unity之详解Texture