本节书摘来异步社区《Unity 5.x游戏开发实战》一书中的第1章,第1.7节,作者: Alan Thorn 译者: 李华峰 责编: 胡俊英,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.7 光源和天空
现在已经完成关卡中基本建筑的模型导入和布局摆放了,只使用很少的几个网格资源和一些基本工具就完成了这些操作。不过,这些工具的功能却是相当强大的,将这些工具组合操作,可以让游戏世界变得丰富多彩,甚至以假乱真。不过,这里还遗漏了一点很重要的事情,那就是光。仔细观察图1.34,这里所有的物体看起来都是单调的,没有光亮、阴影。这是因为场景中并没有配置合适的照明系统,虽然在游戏创建的时候已经默认自带了一个光源对象(Light),但是这个光源对象(Light)现在并没有起什么作用。
现在这个场景中还没有天空,接下来就为这个金币采集游戏添加上一个天空(Sky)效果,单击场景(Scene)视图顶部工具栏的下拉菜单,然后从下拉菜单中选中“skybox”以启用天空效果。这里的天空盒(Skybox)指的就是一个包围了整个场景的大型立方体,这个立方体的每个内部的侧面都有一个贴图(图像),这些贴图连续在一起,看起来就如同现实中的天空一样。这里选用了“skybox”,就在场景(Scene)视图中显示了一个如图1.35所示的默认的天空。
虽然天空效果的启用使得整个场景看起来好多了,但是它却仍然缺乏一个合适的照明系统。场景中的游戏对象缺乏光亮和阴影,为了改善这一点,首先要打开场景(Scene)视图上方(见图1.36)的照明图标开关,确保照明系统是启用的。注意,这个开关只是决定照明系统是否在场景(Scene)视图中起作用,而决定不了在最后的游戏中照明系统是否起作用。
启用了照明系统之后,就会明显地看到场景与之前有了很大的差异,现在的场景看起来真实多了。也可以选择层次(Hierarchy)面板上的“Directional Light”来进行旋转操作,以确定场景中的灯光效果。众所周知,一天中的不同时间里,光线的强度和角度都是不同的,现在就可以利用这种操作来实现不同时间中光线的变化。这样将会改变场景的渲染方式,如图1.37所示。
如果要撤销之前对方向光(Directional Light)做的任何操作,可以按下键盘上的“Ctrl + Z”组合键。为了做好最终及最佳的照明效果,需要把场景中所有不能移动的游戏对象(例如墙壁、地板、桌子、椅子、天花板、草、山、塔等)都标记为静态的。对于Unity来说,意味着标记为静态的游戏对象在整个的游戏过程中,无论发生什么,都是永远不会被移动的。通过将游戏对象标记为静态,就可以帮助Unity在对游戏渲染和照明处理时进行优化。现在只需要在场景中选择所有不能移动的对象(这包括了目前为止游戏中的所有对象),然后在对象的检查(Inspector)面板中选中静态(Static)复选框。注意,无需分别地设置静态属性。在为多个对象设置静态属性时,只需要在选择这些对象的,同时按下Shift键就能选中所有对象,然后就可以一次性地在对象的检查(Inspector)面板中为这些对象设置属性,如图1.38所示。
当为一个几何图形的游戏对象勾选了静态(Static)复选框之后,Unity将会自动为场景中的光线效果进行计算,这些效果包括阴影、间接照明等。通过计算得到了一些被称为“GI缓存”的数据,这些数据中包含了光的传播路线,向Unity指示了光线应该如何在场景中进行传播和反射,才能更真实地模拟现实世界。即便如此,之前勾选了静态复选框的游戏对象还是没有阴影,这将使游戏看起来很不真实。产生这种情况的原因是大部分的网格对象都有一个产生阴影(Cast Shadows)的选项,而这个选项默认是禁用的。现在来消除这个缺陷,首先选中场景中的所有网格对象,然后在检查(Inspector)面板上单击“Mesh Renderer”组件并选中“Cast Shadows”复选框,当完成这个操作后,所有的网格对象就有如图1.39所示的阴影效果了。
现在的网格对象都已经产生了阴影,下面就此开发过程做个小结。到目前为止,已经创建了一个新的Unity项目,使用网格对象填充了整个游戏场景,而且使用方向光(Directional Light)成功地完成了对场景的照明。如果使用第一人称视角模式在这个游戏环境中进行一番游历,那将会是非常棒的体验。好了,我们来看看接下来的操作吧!