2.3 创建场景
游戏是发生在太空中,背景是一颗巨大的火星和浩瀚的星空。在这部分,我们将介绍如何创建材质球,并为星空完成一个UV动画。
2.3.1 创建火星背景和星空动画
步骤 01 在菜单栏中选择【File】→【New Scene】创建一个新的场景。
步骤 02 在菜单栏中选择【File】→【Save Scene As】,将当前场景存放到Assets路径下,这里命名为level1.unity,如图2-3所示。接下来这个游戏的大部分工作都将在这个场景中完成。
图2-3 新建场景
步骤 03 在菜单栏中选择【GameObject】→【3D Object】→【Plane】,创建一个平面体作为火星背景模型。
步骤 04 在Project窗口中单击鼠标右键,选择【Create】→【Material】创建一个材质球,并将其命名为Background,选择【Select】指定mars.png作为贴图,如图2-4所示。
图2-4 指定贴图
当贴图较多时,当前指定贴图的方式比较难查找。另一种指定贴图的方式是确定材质球处于选择状态,在Project窗口中浏览到目标贴图,直接将其拖至材质球的贴图框内。
步骤 05 在Scene窗口中选择火星背景模型,在Inspector窗口中找到Materials下面的Element 0,单击右边的小圆圈按钮,指定Background材质球,如图2-5所示。
图2-5 指定材质
也可以直接将Background材质球拖至Scene窗口的火星背景模型上为其指定材质。在Unity中,几乎所有的“指定”操作都可以通过拖动的方式来完成。
步骤 06 我们会发现火星贴图四周呈现出边框,这是因为默认材质球不能显示Alpha通道的原因。选择Background材质球,将Rendering Mode设为Cutout,即可以显示出透明效果,如图2-6所示。
图2-6 更改渲染模式
接下来,我们将在火星后面创建一个星空背景,创建星空与创建火星的方式相似,在此基础上为星空制作一个UV动画,使画面看起来在缓缓向前移动。
步骤 01 创建另一个平面体,将其放大一些,置于火星下面作为星空的背景,然后为其创建一个材质球,星空背景比较简单,也不需要接收光线,我们为其换一个简单的Shader,在Shader中选择【Unlit】→【Texture】,将材质Shader设为Unlit/Texture,并指定star.png作为其贴图,如图2-7所示。
图2-7 星空
步骤 02 选择星空背景模型,在Project窗口中单击鼠标右键,选择【Create】→【Animator Controller】,创建一个动画控制器,确定星空背景模型在场景中处于选择状态,拖动动画控制器到Inspector窗口下方空白处,将动画控制器组件指定给星空背景模型,如图2-8所示。
图2-8 指定动画控制器组件
步骤 03 在菜单栏中选择【Window】→【Animation】,打开动画窗口(如果之前没有创建动画控制器,这一步会自动创建动画控制器),选择【Create】,创建一个动画文件并保存在工程中的Assets目录内。如果还需要创建更多动画,选择【Create New Clip】即可,如图2-9所示。
图2-9 创建新动画
步骤 04 选择【Add Property】,然后选择Material._Main_Tex_ST添加动画UV属性,如图2-10所示。如果觉得手动添加动画属性不方便,另一种添加动画属性的方式是,单击左上角的“动画记录”按钮进入动画录制状态,然后直接改变场景中Game Object相关属性的值,该属性即可以直接产生动画。
图2-10 添加动画属性
步骤 05 单击左上角的“动画记录”按钮进入动画录制状态,将时间轴前进至30帧左右,将Material._Main_Tex_S属性中的w值设为-1,播放动画,星空贴图将会缓缓移动,如图2-11所示。
图2-11 设置动画播放方式
实际上,动画就是当前Shader中Offset的值,如图2-12所示。同样的方式,也可以为其他属性添加动画。除了可以在Animation窗口中手动设置关键帧外,也可以直接在Inspector窗口中改变数值,Animation工具会自动为数值变化添加关键帧。
图2-12 动画Shader中的值
默认动画是循环播放的,选择动画文件,在Inspector窗口中设置它的Loop Time,即可改变循环模式,如图2-13所示。
图2-13 设置动画循环方式
2.3.2 设置摄像机和灯光
摄像机是用来展示游戏世界的窗口。在一个游戏场景中,允许同时有多个摄像机。摄像机与其他游戏体一样,可以移动、旋转,用脚本控制等。
在这个太空射击游戏中,摄像机的工作很简单,就是从上向下展望火星就行了。
步骤 01 在Scene窗口中调整视图角度。
步骤 02 在Hierarchy窗口中选择Main Camera,这是场景中默认的摄像机。在菜单栏中选择【GameObject】→【Align With View】,使摄像机视角与当前视图一致,如图2-14所示。
图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所示。
图2-15 调节灯光