首页 理论教育虚拟现实:坦克和摄像机构建实践

虚拟现实:坦克和摄像机构建实践

【摘要】:1)创建坦克以及控制坦克首先,在Models文件夹内找到Tank这个model,把它拖拽到Hierarchy内,在Tank的inspector视图中,对其层级进行修改,选择Players,并仅对当前对象修改,如图8-92和图8-93所示。图8-97创建空的GameObject图8-98Main Camera设置修改图8-99摄像机视图正交摄像机的尺寸。图8-100Main Camera的size参数调节摄像机的长宽比。图8-102跟随坦克调整摄像机的尺寸以适应坦克在屏幕上的位置。当然了,这也需要考虑到另外一个tank的不同size值,总之,取最大的size值作为摄像机的缩放范围。

1)创建坦克以及控制坦克

首先,在Models文件夹内找到Tank这个model,把它拖拽到Hierarchy内,在Tank的inspector视图中,对其层级进行修改,选择Players,并仅对当前对象修改,如图8-92和图8-93所示。

图8-92 Tank的inspector

图8-93 修改确认视图

接着,选中Hierarchy中的Tank,为其添加若干个Component,分 别 是:Rigidbody、Box Collider、Audio Source、Audio Source,并对这些部件进行设置,如图8-94所示。

然后,把配置好的Tank从Hierarchy拖拽到Prefabs文件夹下,让它成为一个预制件,这样以后我们可以重复利用该Tank,而不用每次都重新配置。然后保存当前场景。

因为整个游戏场景是在沙漠中的,所以坦克的行驶会有沙尘滚滚的效果,所以我们需要添加这一效果。在Prefabs文件夹内,把DustTrail预制件拖拽到Hierarchy下的Tank内,让其成为Tank的子对象,然后复制粘贴DustTrail,并分别重命名为LeftDustTrail和RightDustTrail,根据下面的官方教程,把两个DustTrail的position进行调节(见图8-95)

设置完毕后,接下来就是对Tank的移动脚本进行 设 置。在/Assets/Scripts/Tank文 件 夹 内,找 到TankMoveMent.cs文件,并把它拖拽到Hierarchy下的Tank内。打开并编辑该脚本,把里面的注释符号去掉,并添加逻辑如下:

图8-94 组件设置

图8-95 DustTrail预件设备

图8-96 变量声明

修改完毕并保存文件,下一步需要初始化在脚本中声明的几个公有变量:Movement Audio、Engine Idling、Engine Driving(见图8-96)。

2)控制摄像机

首先在Hierarchy的根目录下创建一个空的GameObject,并重命名为“CameraRig”,修改其部分Transform数据,如图8-97所示。

接着,我们把Main Camera拖拽到CameraRig内,成为它的子对象,并修改Main Camera的Transform数据,如图8-98所示。

接下来我们需要补充一些关于摄像机的知识:

(1)perspective视图和orthographic视图。要想了解如何控制摄像机,首先知道摄像机的两种不同视图形式,上一章已有所提及:透视视图和正交视图,下面以一幅图来直观地解释(见图8-99)。

图8-97 创建空的GameObject

(www.chuimin.cn)

图8-98 Main Camera设置修改

图8-99 摄像机视图

(2)正交摄像机的尺寸(Size)。调节Main Camera的size参数,如果size变小,那么可视范围变小且物体变大,有放大作用。而size变大,可视范围变大且物体变小,有缩小作用(见图8-100)。

图8-100 Main Camera的size参数调节

(3)摄像机的长宽比(aspect)(见图8-101)。

图8-101 摄像机的长宽比

那么接下来,摄像机应该做些什么?

(1)跟随坦克。找出两辆坦克位置的中心点,把CameraRig移到该点(见图8-102)。

图8-102 跟随坦克

(2)调整摄像机的尺寸以适应坦克在屏幕上的位置(见图8-103)。

图8-103 摄像机尺寸调整

从上面补充的知识可以知道,正交摄像机的视图的长为Size,宽为Size×aspect。接着,在正交摄像机视角看来,坦克的运动可以分解为x轴和y轴的运动,这时,需要把坦克的坐标切换成摄像机视角的本地坐标(见图8-104)。

图8-104 坦克坐标切换

从上面两幅图可以知道,size的选择有两种情况,分别是沿y轴方向(size1=y);以及沿x轴方向,而x轴方向需要做一步计算,即size 2=x/aspect。接着比较这两个size的大小,用大的size值决定摄像机的缩放。当然了,这也需要考虑到另外一个tank的不同size值,总之,取最大的size值作为摄像机的缩放范围。

我们来看一下脚本是如何对摄像机进行控制的,打开/Assets/Scripts/Camera文件夹,选中CameraControl,把它拖拽到CameraRig中,而不是Main Camera。

然后,返回Unity,把Tank拖拽到如图8-105所示的位置。最后,保存场景并运行。

图8-105 Tank拖拽