大家好。我是秦元培。欢迎大家关注我的博客,
博主今天想和大家分享的是Unity3D中的动态阴影。昨天博主重温了一下自己喜欢的游戏《古剑奇谭2》。发现更新后游戏添加了三个免费的DLC。
这三个DLC主要是对主线剧情的一个扩展,博主这里最喜欢的是可控角色初七。从这一点能够看出,烛龙在某种程度上已经默许了以沈夜、谢衣等人为代表的全新主角群。记得当初《古剑奇谭2》刚刚公布的时候,外界对于这款的游戏的评价可谓是褒贬不一。
有人觉得它是近年来国产单机游戏中异军突起的后起之秀,其大刀阔斧地革新让传统的国产RPG焕发出新的生命力。
而有的人则觉得它在战斗模式上不伦不类,上手缺乏打击感,剧情冗长拖沓。关于外界对这款游戏评价,我们这里不去探讨孰是孰非,我们仅仅是来探讨这款游戏中值得我们去研究的东西。
博主在玩了这个DLC以后,明显感觉到烛龙这次在战斗模式上可谓下足了功夫。角色初七是博主十分喜欢的一个角色。这个角色的招式带给人的感觉是有一种ACT游戏的感觉,似乎是烛龙在设计这个DLC的时候在刻意将玩家引导到这个方向上去,总之博主在控制这个角色的时候,找到了非常多年前玩《流星蝴蝶剑》的感觉。好了,我们的游戏先聊到这里。希望对国产RPG游戏感兴趣的朋友能够和我交流啊。我们来一起看以下的这幅图:
我们注意到在主角初七的脚下有一个绿色的光环,在游戏中这是因为主角收集了一个木属性的灵力。我们这里不关注金、木、水、火、土、五行的属性。我们真正要关注的是这个绿色的光环。在游戏中。当玩家行动时。这个绿色的光环能够尾随玩家一起移动。而这就是我们今天要重点解说的内容啦。那么在Unity3D中怎样实现这样的效果呢。我们一起来看今天的内容吧。
一、简单贴图法
所谓简单贴图法即是直接在角色的角底附加一个阴影半透明贴图,并让其尾随角色一起运动,通常是将该阴影Object成为角色模型的子物体,该种阴影生成效果例如以下:
关于这个阴影半透明贴图的做法呢,大家能够參考这篇文章:Unity3D游戏制作(三)——移动平台上的角色阴影制作。
只是这样的方法存在一个严重的问题,即这样的阴影仅仅能应用于平坦的地面上,假设地面凹突不平或者地面上有遮挡物体,则非常easy出现穿帮效果。
因为之前博主已经读过这篇文章,所以在玩这个DLC的时候特意关注了这个问题,结果博主发现《古剑奇谭》使用的就是这样的方式,因为无厌伽蓝中的地面较为平坦,因此选用这样的方式能够实现这样的效果,仅仅是在经过两个房间中间的台阶时,因为地面时凹突不平的,因此玩家脚下的阴影会被遮住一部分。
所以,作为一个技术人员。我们一定要善于从平时的生活中发现问题,所谓处处留心皆学问啊。
二、投影生成法
该方法本质上来说是一种贴花技术。即设定一个投影器,然后将阴影贴图投射到你想展现阴影的地方,该方法的长处在于投影效果不取决于被投影区域的几何形状。即被投影区域能够随意凹凸的曲面。也能够处理各种障碍物。这样的方法实现的步骤是:
(1)通过GameObject->Create Empty来创建一个空的物体,并取名为“Shadow Projector”。
(2) 通过Component->Effects->Projector在该空物体上加入Projector组件,并通过平移、旋转和调整參数达到例如以下效果:
(3)然后在Material选项中拖入已经准备好的材质,就可以投影出阴影。
我们非常快能够发现这样的方法相同存在问题,即场景中不仅生成了阴影,同一时候角色的身体也变黑了。这是因为投影器的Ignore Layers设定为Nothing的缘故。我们将可忽略层设为角色的层Player,则可使角色不再被投影。
上述两种方法是眼下移动平台上的主流阴影生成方法。长处是生成简单,使用方便、计算量较小。但缺点相同突出。即该阴影是假的,并非真的物体投射阴影。所以真实感并不强。
只是作为刚開始学习的人,我们还是应该踏踏实实地来掌握这样的基础的方法,因为仅仅有在掌握了基础的前提下。我们才干尝试去突破自我把知识内化为自己的东西。
好了。以下我们一起来利用今天的方法来实现一个简单的样例吧。首先我们创建一个简单的场景。例如以下图所看到的:
为了让我们更专注于动态阴影的制作,我们这里使用的时官方提供的人物模型,为了使用投影器。我们将Projectors包导入到项目中来:
接下来我们创建一个空物体,命名为Projector,然后为其加入投影器组件,接下来我们调整投影器的位置和角度使其垂直于角色向下投影。为角色创建一个单独的层Player,将Projector组件的Ignore Layers设置为Player,这样能够使我们角色不变黑,材质选择Shadow Material。此时。场景中的效果例如以下:
能够注意到我们的角色脚底下已经有了阴影的效果。好了,在确定Projector和角色的x与z坐标一致后。我们将其拖入模型下方,使其成为模型的子物体。这样阴影将和模型保持一致,好了。我们执行程序:
我们能够看到程序执行非常完美,请大家无视角色脚下黑乎乎的那团影子啊,哈哈。
好了,以下我们再来一起实现基于绘制贴图的方式来实现阴影效果啊。首先我们准备一张图片,这是博主自己找的一张图片:
以下我们在场景中加入一个Plane命名为TextureProjector,将这张图片拖入到TextureProjector中。调整到合适的大小。如图:
相似地。我们在确定这张贴图和角色的x与z坐标一致后,将其拖入我们将其拖入模型下方,使其成为模型的子物体。执行程序:
在实际应用中可能要解决贴图平滑旋转的问题。这里仅仅是为了演示基于贴图实现阴影的方法而已,当然我们不建议使用Unity自身生成的Plane。因为Unity生成的面数较多。可通过3DMax等建模工具来自行建模,这样能够优化我们的项目。好了,今天的内容就是这样啦,希望大家喜欢啊,呵呵,睡觉咯!
每日箴言:生命中最难的阶段不是没有人懂你,而是你不懂你自己。
转载请注明出处。本文作者:秦元培。