首先是效果

要让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低于设定值,则直接丢弃不渲染

[UnityShader]unity中2D Sprite显示阴影和接受阴影的更多相关文章

  1. Unity中2D和UGUI图集的理解与使用

    图集 什么是图集? 在使用3D技术开发2D游戏或制作UI时(即使用GPU绘制),都会使用到图集,而使用CPU渲染的2D游戏和UI则不存在图集这个概念(比如Flash的原生显示列表),那么什么是图集呢? ...

  2. Unity之2D Sprite Outline外轮廓效果

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity5.3.8f1 Unity提供了2D Object Sprite对象,但是没有提供外轮廓Outline效果的支持 ...

  3. 【Unity3D基础教程】给初学者看的Unity教程(三):通过制作Flappy Bird了解Native 2D中的Sprite,Animation

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 上一次我们讲了MonoBehaviou ...

  4. 【转】通过制作Flappy Bird了解Native 2D中的Sprite,Animation

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 上一次我们讲了MonoBehaviou ...

  5. boostrap中模态框显示在阴影之下

    boostrap中模态框显示在阴影之下 出现这种情况的原因我开始也搞了很久,问题出现在哪里呢? 有事问百度,在百度上查了一下资料,他们主要的解决办法:是 修改标签的z-index属性的值, 我试着改了 ...

  6. 在Unity中实现屏幕空间阴影(1)

    接着上篇文章,我们实现了SSR效果. 其中的在屏幕空间进行光线追踪的方法是通用的.借此我们再实现一种屏幕空间的效果,即屏幕空间阴影. 文中的图片来自Catlike coding http://catl ...

  7. Unity中调用Windows窗口句柄以及根据需求设置并且解决扩展屏窗体显示错乱/位置错误的Bug

    问题背景: 现在在搞PC端应用开发,我们开发中需要调用系统的窗口以及需要最大化最小化,缩放窗口拖拽窗口,以及设置窗口位置,去边框等功能 解决根据: 使用user32.dll解决 具体功能: Unity ...

  8. 【unity shaders】:Unity中的Shader及其基本框架

    shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...

  9. Unity中简单使用Opengl

    简介 由于项目特殊需求,需要在unity中使用一些OpenGL的东西来绘制图形(PS:其实就是有一个拖尾算法只有OpenGL版本~~~懒得改了,直接在unity中使用OpenGL算了).所以琢磨咯下如 ...

  10. 关于Unity中的NGUI和UGUI

    一.用Unity开发2D游戏,有三套关系 1.GUI:Unity本身自带的GUI 2.NGUI:以前在Unity中广泛来做2D的,是第三方的包,需要安装 3.UGUI:Unity5.X后(其实是Uni ...

随机推荐

  1. android studio 写一个桌球简单页面

    首先: 保存素材图: 其次: 参考:https://blog.csdn.net/nanhaoluo23/article/details/111144033 一步一步来,导入素材我就卡住了,找不到 于是 ...

  2. 官网下载CentOS系统镜像过程

    想学习CentOS系统,但是不知道镜像去哪里搞,随便去个第三方发现要么要注册,要么各种广告病毒,或者好不容易找到官网,不仅全英文,有些专业术语也不懂,本文说明官网下载自己想要的CentOS镜像整个流程 ...

  3. SQL29 计算用户的平均次日留存率

    SQL29 计算用户的平均次日留存率 困难 通过率:48.58% 时间限制:1秒 空间限制:256M 描述 题目:现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率.请你取出相应数据. 示例 ...

  4. vim 使用快捷键

    1.从电脑的txt文件中复制内容到vim中 复制你喜欢的任何内容,在Vim中,按下Shift+Insert将剪贴板中的内容粘贴到文件中. 确保你在Insert Mode.只要我尝试过,它在Ubuntu ...

  5. Python爬取cnnvd

    利用python监控CNNVD上面的新出漏洞实例,可以配合邮箱推送获取最新的漏洞情报 爬取cnnvd import requests from bs4 import BeautifulSoup imp ...

  6. Grafana 系列文章(八):Grafana Explore 中的 Inspector

    ️URL: https://grafana.com/docs/grafana/latest/explore/explore-inspector/ Description: Explore 中的检查器 ...

  7. Dijkstra求最短路 I(朴素算法)

    这道题目又是一个新算法,名叫Dijkstra 主要思路是:输入+dist和vis初始化(都初始化为0x3f)+输入g(邻接矩阵)+Dijkstra函数       Dijkstra函数:先将dist[ ...

  8. @mapper注解

    1.标记这是一个映射接口,这样子写还是需要写xml文件 package com.atguigu.springcloud.dao; import com.atguigu.springcloud.enti ...

  9. SpringCloud Stream消息驱动

    简单搭建,没有技术含量,Demo可用 1.介绍 ①产生原因 RabbitMQ.RocketMQ.Kafka.ActiveMQ 在一个项目中,可能存在多种不同的MQ,在不同的MQ中,切换维护开发都很麻烦 ...

  10. 如何通过Java 代码设置 Word 文档页边距

    页边距是指页面的边线到文字的距离.通常可在页边距内部的可打印区域中插入文字和图形,也可以将某些项目放置在页边距区域中(如页眉.页脚和页码等).在我们用的Word文档中,都会设置页边距统一标准格式,页边 ...