![Unity 3D\2D手机游戏开发:从学习到产品(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/490/26943490/b_26943490.jpg)
2.3 创建场景
游戏是发生在太空中,背景是一颗巨大的火星和浩瀚的星空。在这部分,我们将介绍如何创建材质球,并为星空完成一个UV动画。
2.3.1 创建火星背景和星空动画
步骤 01 在菜单栏中选择【File】→【New Scene】创建一个新的场景。
步骤 02 在菜单栏中选择【File】→【Save Scene As】,将当前场景存放到Assets路径下,这里命名为level1.unity,如图2-3所示。接下来这个游戏的大部分工作都将在这个场景中完成。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0036_0003.jpg?sign=1738881954-pv0VDmgiLymGMXSiZngGFm0bbR1OqofD-0-e7a601b955303a49556a388987e9cf0d)
图2-3 新建场景
步骤 03 在菜单栏中选择【GameObject】→【3D Object】→【Plane】,创建一个平面体作为火星背景模型。
步骤 04 在Project窗口中单击鼠标右键,选择【Create】→【Material】创建一个材质球,并将其命名为Background,选择【Select】指定mars.png作为贴图,如图2-4所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0036_0006.jpg?sign=1738881954-oZWjVTGBNDkfH79gzKcIlTeaSZSzBjqu-0-7abef852b52c28438ce51eb055418229)
图2-4 指定贴图
当贴图较多时,当前指定贴图的方式比较难查找。另一种指定贴图的方式是确定材质球处于选择状态,在Project窗口中浏览到目标贴图,直接将其拖至材质球的贴图框内。
步骤 05 在Scene窗口中选择火星背景模型,在Inspector窗口中找到Materials下面的Element 0,单击右边的小圆圈按钮,指定Background材质球,如图2-5所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0037_0001.jpg?sign=1738881954-ZYLA6USEvy4ASP8jNzFT0srcYMj01rwo-0-9cd2dc5e5ff71e78a9119480227144f2)
图2-5 指定材质
也可以直接将Background材质球拖至Scene窗口的火星背景模型上为其指定材质。在Unity中,几乎所有的“指定”操作都可以通过拖动的方式来完成。
步骤 06 我们会发现火星贴图四周呈现出边框,这是因为默认材质球不能显示Alpha通道的原因。选择Background材质球,将Rendering Mode设为Cutout,即可以显示出透明效果,如图2-6所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0037_0002.jpg?sign=1738881954-ZlvxUcmQdld6iHu7LGR9d7eiDWU8Wrna-0-0dffc99a148810783548add5fcef6a0e)
图2-6 更改渲染模式
接下来,我们将在火星后面创建一个星空背景,创建星空与创建火星的方式相似,在此基础上为星空制作一个UV动画,使画面看起来在缓缓向前移动。
步骤 01 创建另一个平面体,将其放大一些,置于火星下面作为星空的背景,然后为其创建一个材质球,星空背景比较简单,也不需要接收光线,我们为其换一个简单的Shader,在Shader中选择【Unlit】→【Texture】,将材质Shader设为Unlit/Texture,并指定star.png作为其贴图,如图2-7所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0038_0001.jpg?sign=1738881954-b6AkXmu19hxyjEq6kzP3DxCeeSqHBxCX-0-c8a42011cae7df5830efdefd6ea9b34c)
图2-7 星空
步骤 02 选择星空背景模型,在Project窗口中单击鼠标右键,选择【Create】→【Animator Controller】,创建一个动画控制器,确定星空背景模型在场景中处于选择状态,拖动动画控制器到Inspector窗口下方空白处,将动画控制器组件指定给星空背景模型,如图2-8所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0038_0002.jpg?sign=1738881954-ZUarMYCTHZEzImqtR4ryjotKjhagksbf-0-f47819e68e2c0f65b4efa4f70e2dcb81)
图2-8 指定动画控制器组件
步骤 03 在菜单栏中选择【Window】→【Animation】,打开动画窗口(如果之前没有创建动画控制器,这一步会自动创建动画控制器),选择【Create】,创建一个动画文件并保存在工程中的Assets目录内。如果还需要创建更多动画,选择【Create New Clip】即可,如图2-9所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0038_0003.jpg?sign=1738881954-sXVHtZegSssufd3TNezi7jdMzk4y1jcA-0-50f7d08ba5b5bc556afea6b2b9a2a8e3)
图2-9 创建新动画
步骤 04 选择【Add Property】,然后选择Material._Main_Tex_ST添加动画UV属性,如图2-10所示。如果觉得手动添加动画属性不方便,另一种添加动画属性的方式是,单击左上角的“动画记录”按钮进入动画录制状态,然后直接改变场景中Game Object相关属性的值,该属性即可以直接产生动画。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0039_0001.jpg?sign=1738881954-Kn9rspogFNmlRvxotsyYna02FLaKmMrc-0-0667cd32ed12e175d7d2c927aaef5bf6)
图2-10 添加动画属性
步骤 05 单击左上角的“动画记录”按钮进入动画录制状态,将时间轴前进至30帧左右,将Material._Main_Tex_S属性中的w值设为-1,播放动画,星空贴图将会缓缓移动,如图2-11所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0039_0002.jpg?sign=1738881954-3FR4TcY4BpijzK0oczpZ2FtENOHjFqCw-0-c38e983ca39f55324a35b9a92bbb2197)
图2-11 设置动画播放方式
实际上,动画就是当前Shader中Offset的值,如图2-12所示。同样的方式,也可以为其他属性添加动画。除了可以在Animation窗口中手动设置关键帧外,也可以直接在Inspector窗口中改变数值,Animation工具会自动为数值变化添加关键帧。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0039_0003.jpg?sign=1738881954-6N4MAPHMbd9ufflxg9EAUqK2yqSvx2Z7-0-5d86f9982bd73b186e2b8933739eebb3)
图2-12 动画Shader中的值
默认动画是循环播放的,选择动画文件,在Inspector窗口中设置它的Loop Time,即可改变循环模式,如图2-13所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0039_0004.jpg?sign=1738881954-jtfyDxmLVuzelS0cRwd8PKfFSp0UvaFP-0-a3c4e00f96b00a6b2b1194bc3f0bf68d)
图2-13 设置动画循环方式
2.3.2 设置摄像机和灯光
摄像机是用来展示游戏世界的窗口。在一个游戏场景中,允许同时有多个摄像机。摄像机与其他游戏体一样,可以移动、旋转,用脚本控制等。
在这个太空射击游戏中,摄像机的工作很简单,就是从上向下展望火星就行了。
步骤 01 在Scene窗口中调整视图角度。
步骤 02 在Hierarchy窗口中选择Main Camera,这是场景中默认的摄像机。在菜单栏中选择【GameObject】→【Align With View】,使摄像机视角与当前视图一致,如图2-14所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0040_0003.jpg?sign=1738881954-woAnO1gCEpOsgxSsl30nYmFLIlYhDts1-0-cb732c79d5a14f214964f29e7de7d497)
图2-14 调整视图角度
Hierarchy窗口是一个名称列表,并可以按子父层级关系排列显示,它们与Scene窗口中出现的游戏体是一一对应的。
现在,如果我们运行游戏,可能会发现在Game窗口中的画面亮度与Scene窗口不一致。在Scene窗口上方单击”太阳”图标,Scene窗口将使用真实的灯光信息,因为这时场景中还没有灯光,所以画面是比较暗的。
步骤 03 在菜单栏中选择【Window】→【Lighting】,选择Ambient Source,将Skybox改为Color,这样会使用颜色作为环境光代替默认的天空盒,然后调整Ambient Color的颜色,可以整体影响场景光线亮度。本示例不需要使用Lightmap(灯光贴图),取消Lighting界面最下方的Auto(自动)选项,防止Unity自动为场景构建Lightmap等。
步骤 04 在菜单栏中选择【GameObject】→【Light】→【Point Light】,创建一个点光源,将其置于火星模型上方,然后调节其Range的值改变灯光范围,调节Intensity的值改变灯光强度,如图2-15所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0040_0006.jpg?sign=1738881954-jP9yuY6I6iNwJBHLAMIqlaSGVddeuWQ6-0-3dbde5b7bc595cd304ca85609ccefd88)
图2-15 调节灯光