前言

在上一篇我们简单了了解了Unity 2D动画的实现,在这一篇中,我们来学一下Unity的2D Light,给我们的2D动画添加上光照效果,简单的效果图如下:

unity2d动画实现残影效果 unity2d光影_2D Light

首先先分享一个B站上别人翻译了的视频:https://www.bilibili.com/video/BV1Y4411g7wc?t=440 视频介绍的很详细了。

Unity的2D Light是在2019.2版本之后才有的,因此首先要保证自己的Unity版本是2019.2或者更新。由于自己现在工程是2019.3的,所以就按照新版本介绍啦。(注:Shadow Caster 2D也2019.3版本才有的组件)

URP的官方文档:https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.1/manual/index.html

 

图片设置

前面场景里面只有孤零零的一只猫,现在我们给他加一个背景上去,大家可以根据自己的喜好添加。

在Sprite Renderer中,我们添加两个新的Layer,分别叫Background和Character,给背景图的Sorting Layer设置为Background,猫咪的设置为Character(设置这个的原因后续会讲解到)

unity2d动画实现残影效果 unity2d光影_新功能_02

初步效果如下:

unity2d动画实现残影效果 unity2d光影_ShadowCaster2D_03

 

环境配置

我们先打开Window->Package Manager窗口,下载Universal RP(URP,2019.3版本新功能),2019.2版本的话下载Lightweight RP(LWRP)。

添加好之后,我们会发现在创建灯光的选项中新增了2D选项,但是都是置灰的。

unity2d动画实现残影效果 unity2d光影_2D Light_04

此时我们需要设置下URP,首先我们在Project面板右键Create一个Pipeline Asset(取名为:URPAsset)和一个2D Renderer(取名为:2DRendererData)

unity2d动画实现残影效果 unity2d光影_新功能_05

选中LWRPAsset,将其Renderer Type改为Custom,并将我们生成的2DRendererData拖上去。

unity2d动画实现残影效果 unity2d光影_ShadowCaster2D_06

       

unity2d动画实现残影效果 unity2d光影_新功能_07

然后在Edit->Project Settings中,在Graphics的设置中,将我们的Asset拖上去即可,此时我们就可以创建2D Light了。

 

注:此时添加2D Light,对我们图片不会产生影响,并且图片即使没有灯光,依旧是亮着的(但是重新拖Sprite到场景中效果就正确了)。这是因为我们在之前环境下生成的Sprite Renderer自动填充的Material使用的Shader不受光照影响。我们可以在工具栏Edit下进行升级

unity2d动画实现残影效果 unity2d光影_unity2d动画实现残影效果_08

不受光照影响:

unity2d动画实现残影效果 unity2d光影_2D Light_09

       受光照影响:

unity2d动画实现残影效果 unity2d光影_ide_10

此时我们摄像机看见的就全黑了,因为我们还没有添加光照。

 

灯光设置

先简单的介绍下现有的几种2D Light:

Freeform Light 2D

unity2d动画实现残影效果 unity2d光影_新功能_11

我们可以通过Edit Shape自行定义各种形状的灯光。在Inspector面板中可以定义灯光颜色强度,边缘的衰退效果等。

其中需要强调的是Target Sorting Layer,也就是该灯光作用的图层。由于最上面图片设置的时候,我们设置了新的Layer,所以灯光这我们也需要选择下,否则依旧是一片漆黑。

Sprite Light 2D

unity2d动画实现残影效果 unity2d光影_ide_12

可以通过设置Sprite来定义灯光的形状。

Parametric Light 2D

unity2d动画实现残影效果 unity2d光影_unity2d动画实现残影效果_13

一种多边形的灯光,我们可以通过设置Sides来设置其边数。

Point Light 2D

unity2d动画实现残影效果 unity2d光影_新功能_14

点光源,同时我们可以将其设置成扇形光源,可以用于实现阳光照射的效果。

Global Light 2D

unity2d动画实现残影效果 unity2d光影_ide_15

全局光照,可以通过设置光照强度颜色这些参数,进行全局的影响。

 

介绍完几种光照后,我们就开始为我们的场景添加自己想要的光照效果即可。由于很简单,这边就不过多介绍了。

 

设置阴影

首先给2D灯光设置阴影效果是2019.3版本的新功能,我们需要先给会产生阴影的灯光设置一下阴影强度(Shadow Intensity)。然后给我们会产生阴影的物体(也就是小猫咪)添加一个Shadow Caster 2D组件。

添加好之后发现也有个可编辑Shape,灯光会在照射到这个Shape后产生阴影。

unity2d动画实现残影效果 unity2d光影_unity2d动画实现残影效果_16

     

unity2d动画实现残影效果 unity2d光影_unity2d动画实现残影效果_17

Use Renderer Silhouette

是否将Renderer的轮廓作为阴影计算的一部分

Casts Shadows

是否开启阴影

Self Shadows

是否开启自身阴影

关于Use Renderer Silhouette和Self Shadows的搭配,文档中有个简单的例子,这里就贴一下。

unity2d动画实现残影效果 unity2d光影_unity2d动画实现残影效果_18

 

注:由于我们的猫咪是有动画的,但是这种方式添加的阴影并不会因为播放动画时,图片的变形而动态的更新新的阴影。