Unity 官方教程 Tanks (一)

先从Unity Store 上下载资源

Unity 官方教程 Tanks (一)_第1张图片

导入到工程后,可以看到文件结构是这样的,Complete是完成的资源,可以作为我们的参考。然后我们新建一个场景,命名为Main Scene,然后放在新建的Scene文件夹下,打开新的场景,将prefab中LevelArt放入其中,打开Window/Light,进行如下设置,如果是因为版本不同,可以参考Complete文件夹下的场景中的Light设置。设置后点击右下角的Build,需要花费几分钟。

Unity 官方教程 Tanks (一)_第2张图片

然后我们对Camera进行设置,根据教程

Unity 官方教程 Tanks (一)_第3张图片
Unity 官方教程 Tanks (一)_第4张图片

最后应该是这样

Unity 官方教程 Tanks (一)_第5张图片

控制坦克

我们拖入Models中的Tank,设置其Layer为Players,对话框选No

Unity 官方教程 Tanks (一)_第6张图片

添加新的组件,并设置

Unity 官方教程 Tanks (一)_第7张图片
.

我们刚才添加了rigidBody,锁定了它的位置和旋转方向,设置了BoxCollider,添加了一个静止时的音效,设为Loop,又加了一个空的Audio Source。然后我们把它设为prefab放入Prefab文件夹。

由于坦克在沙漠中,移动时应该有沙尘,将Prefabs下的DustTrail,移入Tank下,并复制一个,分别命名后再进行position的设置

Unity 官方教程 Tanks (一)_第8张图片
Unity 官方教程 Tanks (一)_第9张图片

将TankMovement.cs拖入Tank下,删去注释起来的代码,添加如下内容

Unity 官方教程 Tanks (一)_第10张图片
Unity 官方教程 Tanks (一)_第11张图片

代码包含2个功能,第一个是根据输入来移动来旋转Tank,第二个是根据移动与否来切换音效。试一下吧,tank可以移动,音效也匹配,并且沙尘滚滚。

Unity 官方教程 Tanks (一)_第12张图片

摄像机的控制

我们现在让摄像机机跟随玩家坦克,我们先新建一个GameObject,重命名CameraRig,Transform设置如下

Unity 官方教程 Tanks (一)_第13张图片

将Main Camera设为其子物体,Transform设置如下,Size设为6.5。

Unity 官方教程 Tanks (一)_第14张图片

然后将camera的Size设为6.5。

游戏设定是两个玩家,因此我们要能根据2个玩家的位置动态的改变摄像机,分为2步,第一步是根据2个坦克的位置改变摄像机的位置,第二步是根据坦克位置改变摄像机的大小,即先移动,再变焦。我们先来看移动。

我们打开CameraControls.cs

Unity 官方教程 Tanks (一)_第15张图片
Unity 官方教程 Tanks (一)_第16张图片

这部分比较好理解,游戏里代码中设定了可以有多个坦克,获取所有坦克的位置,取平均值,得到一个中心点,通过Vector3.SmoothDamp方法将摄像机平滑的移动过去。我们先注释FixedUpdate()方法中的Zoom()方法,然后复制一个tank,将其PalyerNum设为2

Unity 官方教程 Tanks (一)_第17张图片

将2个tank置入代码中CameraRig的代码组件中,注意需要将CameraControl.cs中的m_Targets前的[HideInInspector]去掉

Unity 官方教程 Tanks (一)_第18张图片

运行一下,摄像机确实按照坦克的位置往中心点平滑移动,但是坦克间距过大时会看不到坦克,这就需要Zoom()方法。

我们先补充下摄像机的基本知识,

摄像机分为perspective视图和orthographic视图,即透视视图和正交视图。

Unity 官方教程 Tanks (一)_第19张图片

我们可以看到camera中有个Size值,这个表示什么呢

Unity 官方教程 Tanks (一)_第20张图片

原来它表示camera高的一半

Unity 官方教程 Tanks (一)_第21张图片

宽是size*2,那么长是怎么确定的呢:

Unity 官方教程 Tanks (一)_第22张图片

原来摄像机视图比例和屏幕分辨率相同,宽又知道,根据比例就可以确定长了。以这个分辨率为例: aspect = 1920/1080

理解了这些,我们就可以根据坦克的距离来改变Size的大小,从而使得摄像机合理的调整视图大小了。

我们现在看Zoom()里的方法:

Unity 官方教程 Tanks (一)_第23张图片

即根据摄像机的中心点,不断的去获取坦克和中心点的距离(这里要将坦克和中心点换算成屏幕坐标,用InverseTransformPoint方法),改变size去适应这个距离。最后将size赋予camera即可。运行一下,用户1用WASD移动,用户2用方向键移动,摄像机确实可以及时调整位置和视图大小了。


Unity 官方教程 Tanks (一)_第24张图片

你可能感兴趣的:(Unity 官方教程 Tanks (一))