Unity 3D官方教程——Tanks!学习记录

1.游戏界面基础设置

先在官方资源商店导入Tank!的所有资源(怎样导入已在Survival Shooter中说明),新建_Scenes文件夹,将新场景命名为Main并保存。

删除Hierarchy下系统自带的Directional Light。

在Prefabs文件夹下找到LevelArt预制件,拖入到Hierarchy下并reset。打开Window下的Lighting视图,我们不需要自动渲染光对象,所以取消勾选Auto。取消勾选Baked GI(不需要全局静态光照烘焙),将Precomputed Realtime GI下Realtime Resolution改为0.5像素一单位实时光照烘焙。然后将Ambient Source设为Color(即用单色而不是天空盒来处理 环境光),Ambient Color设置为(0.282,0.243,0.443)。最后点击下方的Bulid按钮开始烘焙上面的设置。如果第一次开始烘焙,会有点慢。

Unity 3D官方教程——Tanks!学习记录_第1张图片

 

主相机设置,单击Hierarchy下MainCarema,将Position设为(-43,42,-25),Rotation设为(40,60,0),Projection改为正交模式(Orthographic)。Clear Flags设为Solid Color(即屏幕上没有绘制的部分设为纯色(背景色)),Background设为(80,60,50)。

Unity 3D官方教程——Tanks!学习记录_第2张图片

 

 

2.游戏对象tank的创建和控制

在Model文件夹找到Tank模型,拖入Hierarchy并reset,将Tank的Layer设为Player(Layer的设置及作用已在Survival Shooter3中说明),选择只应用于本对象而非其子对象。为tank添加rigidbody 组件,冻结position-y和rotation-x&z(为了只让tank在平面上走动和转向)。接着添加Box collider(坦克是方方正正的),将Center设为(0,0.85,0),Size设为(1.5,1.7,1.6),注意不要勾选Is trigger。继续添加Audio Source组件,点击Audio Clip旁的小圆圈选择EngineIdle,勾选Player On Awake 和Loop(引擎一直在转)。再次添加新的Audio Source组件,用于之后坦克发射的音频播放,我们将用脚本控制该音频播放,所以不用点选Audio Clip,将Player On Awake 和Loop都取消勾选。

Unity 3D官方教程——Tanks!学习记录_第3张图片

 

将设置好的tank拖入Prefabs文件夹以成为预制件供批量使用。找到Prefabs文件夹下的DustTrail预制件(一个扬起灰尘轨迹的粒子特效),拖入到Tank下,并复制,一个重命名为LeftDustTrail,设置Position为(-0.5,0,0.75),另一个名为RightDustTrail,设置Position为(0.5,0,-0.75)。

Unity 3D官方教程——Tanks!学习记录_第4张图片

 

添加文本让坦克动起来,打开Scripts下Tank下TankMovement脚本并编辑

Unity 3D官方教程——Tanks!学习记录_第5张图片

Unity 3D官方教程——Tanks!学习记录_第6张图片

Unity 3D官方教程——Tanks!学习记录_第7张图片

 

保存后回到unity将TankMovement拖入Tank并填制好脚本所需对象和变量

Unity 3D官方教程——Tanks!学习记录_第8张图片

 

最后记得点击Apply使我们上面的设置与Prefabs下的Tank同步。

Unity 3D官方教程——Tanks!学习记录_第9张图片

 

 

3.摄像机设置

Hierarchy下新建空对象命名为CameraRig,并reset,将Rotation改为(40,60,0)。把Main Camera拖入CameraRig下成为子对象,将Main Camera的Position设为(0,0,-60)。

Unity 3D官方教程——Tanks!学习记录_第10张图片

 

将Scripts文件夹下Camera里CameraController脚本拖入到CameraRig,并编辑。

Unity 3D官方教程——Tanks!学习记录_第11张图片

Unity 3D官方教程——Tanks!学习记录_第12张图片

Unity 3D官方教程——Tanks!学习记录_第13张图片

 

保存后回到unity将Tank拖入脚本里的Targets下。

 

 

4.tank生命值设置

先将坐标模式设置成为Pivot和Local。然后新建滑条(Hierarchy→Create→UI→Slider),之前我们已经在survival shooter讲过创建任何UI组件,系统都会自动新建Canvas和Eventsystem。点击EventSystem,将Horizontal Axis改为HorizontalUI,Vertical Axis改为VerticalUI(因为不需要玩家主动修改进度条,Horizontal和Vertical另用于操作 tank)。

Unity 3D官方教程——Tanks!学习记录_第14张图片

 

再点击Canvas,将Render Mode改为 World space(Overlay:canvas与屏幕场景相关,调节场景大小和分辨率,canvas随之改变;Camera:与相机相关,调整摄像机随之改变;World space:canvas与其他3D对象一样,只自身调整),将Canvas Scaler的Reference Pixels Per Unit改为1(即每一渲染单位为1像素)。将Canvas拖入Tank下使成为子对象(tank动滑条跟着动)。将Canvas的Pos改为(0,0.1,0),width和height都改为3.5,Rotation改为(90,0,0),定焦于Canvas(双击),可以看到canvas刚好铺在tank周围。

Unity 3D官方教程——Tanks!学习记录_第15张图片

 

点击slider,删除handle slide area(不需要滑条按钮)。单击Slider摁住shift键再点击Fill可将Sslider及其子对象全部选定,点击Anchor Presets,摁住alt键选择全部覆盖。

Unity 3D官方教程——Tanks!学习记录_第16张图片

 

将Slider命名为HealthSlider,取消勾选Interacatable(不许玩家输入),Transition选为None(不需要滑条染色),Max Value改为100(滑条最大生命值)同时把Value拉到最右边。点击HealthSlider下的Background,Source Image选为HealthWheel,Color的A(透明度)设为80。点击HealthSlider下的Fill,Source Image同样选为HealthWheel, 颜色A改为150,Image Type选为Filled,Fill Origin选为Left(填充起点,即滑条起点),取消勾选Clockwise(是否顺时针)。

Unity 3D官方教程——Tanks!学习记录_第17张图片

Unity 3D官方教程——Tanks!学习记录_第18张图片

Unity 3D官方教程——Tanks!学习记录_第19张图片

 

将Scripts文件夹下UIDirection脚本拖入HealthSlider下。这是为了滑条固定旋转角度,不然滑条也跟着转来转去超眼晕。(healthslider的父对象是canvas)

Unity 3D官方教程——Tanks!学习记录_第20张图片

 

单击Hierarchy下的Tank,继续点击Apply使上面的改动应用于Prefabs。将Prefabs下的TankExplosion拖入Hierarchy(注意不是tank下),为TankExplosion添加Audio Source并将Audioclip选择TankExplosion音频,取消勾选Play On Awake和Loop,点击Apply后将Hierarchy下的TankExplosion删除。

Unity 3D官方教程——Tanks!学习记录_第21张图片

 

将TankHealth脚本拖入Tank

Unity 3D官方教程——Tanks!学习记录_第22张图片

Unity 3D官方教程——Tanks!学习记录_第23张图片

 

回到unity,将TankHealth所需的引用都填入,最后记得点击Tank的Apply以同步修改。

Unity 3D官方教程——Tanks!学习记录_第24张图片

 


5.炮弹shells设置

将Models文件夹里的Shell(炮弹)模型拖入Hierarchy,为Shell添加Rigidbody(有重力属性炮弹会自动落下),接着添加Capsule Collider组件,勾选Is Trigger(炮弹可被 坦克穿过),Center设为(0,0,0.2),Radius设为0.15,Height设为0.55。

Unity 3D官方教程——Tanks!学习记录_第25张图片

 

将Prefabs下的ShellExplosion拖入Shell使成为子对象,为子对象ShellExplosion添加Audio Source,将AudioClip选为ShellExplosion音频,取消勾选Play On Awake和Loop。回到Shell,为shell添加Light组件(炮弹发光)。将ShellExplosion脚本拖入Shell,并编辑。

Unity 3D官方教程——Tanks!学习记录_第26张图片

Unity 3D官方教程——Tanks!学习记录_第27张图片

保存后回到unity,将ShellExplosion所需引用填入。

Unity 3D官方教程——Tanks!学习记录_第28张图片

 

最后将我们设置好的Shell拖入Prefabs文件夹使其成为预制件,并将Hierarchy下的Shell删除。

 

6.发射炮弹

先设置炮弹发射点,在Tank下新建空对象命名为FireTransform,Position设为(0,1.7,1.35),Rotation设为(350,0,0)。Canvas下新建滑条命名为AimSlider,删掉滑条的Background和Handle Slide Area。选定Aimslider,取消勾选Interactable,Transition设为None,Direction设为Bottom To Top(从底往头),Min Value为15,Max Value为30。

Unity 3D官方教程——Tanks!学习记录_第29张图片

 

选定AimSlider和子对象FIll Area(不要选Fill),将Anchor Presets摁住alt选定全部覆盖(右下方)。

Unity 3D官方教程——Tanks!学习记录_第30张图片

 

点击Fill,Height设为0,Source Image 设为Aim Arrow。选定Aimslider双击定焦,调整滑条到合适位置(自己看视频,或者直接将AimSlider设为Left和Right为1,Top为-9,Bottom为3,Pos Z设为-1)

Unity 3D官方教程——Tanks!学习记录_第31张图片

 

将TankShooting脚本拖入Tank,打开并编辑。

Unity 3D官方教程——Tanks!学习记录_第32张图片

Unity 3D官方教程——Tanks!学习记录_第33张图片

Unity 3D官方教程——Tanks!学习记录_第34张图片

 

保存后回到unity将TankShooting引用的所有都填入,记得AudioSource填入第二个,第一个是用来切换引擎声音的。

Unity 3D官方教程——Tanks!学习记录_第35张图片

 

完毕后选定Tank点击Apply以生效。保存后测试坦克既可以移动也可以发射(如果不行记得点击Edit→Project Settings→Input,看看Horizontal和Vertical以及Fire键的设置)。确定将Tank点击Apply后删除Hierarchy下的Tank。

 

7.游戏流程控制

新建一个空对象命名为SpawnPoint1,Position设为(-3,0,30),Rotation设为(0,180,0),标签选为蓝色。另建一空对象命名为SpawnPoint2,Position设为(13,0,-5),Rotation为(0,0,0),标签选为红色。这将是两辆坦克的出生点。

Unity 3D官方教程——Tanks!学习记录_第36张图片

 

新建Text(Create→UI→Text),系统自动又新建了一个Canvas(一个Hierarchy里只能有一个Canvas,之前的Canvas是Tank的子对象,Tank现存为prefab),将Canvas命名为MessegeCanvas,将Text的Left,Right,Top,Bottom均改为0,Anchors Min为(0.1,0.1),Max为(0.9,0.9)。内容改为“TANKS!”,字体font改为BowlByOne,设为居中,勾选Best Fit(屏幕适配大小),将Max Size改为60,颜色选为白色。

Unity 3D官方教程——Tanks!学习记录_第37张图片

 

为Text添加Shadow组件(Add Component→UI→Effects→Shadow),颜色设为(114,71,40,128),Effect Distance为(3,-3)。点击Camera Rig ,将Size设为0( 我们已经把tank删除了),打开CameraControl脚本,将[HideInInspector]还原。

 

新建空对象命名为GameManager,将GameManager脚本拖入,并将脚本所引用内容拖入填好。两种颜色的设置为(42,100,178,0),(229,46,40,0).

Unity 3D官方教程——Tanks!学习记录_第38张图片

 

GameManager脚本完全引用了TankManager脚本(TankManager是GameManager的子对象),所以TankManager不用拖入任何gameobject,且TankManager也不用继承MonoBehaviour(即使用start,update等)。所以我们先看TankManager脚本。

Unity 3D官方教程——Tanks!学习记录_第39张图片

Unity 3D官方教程——Tanks!学习记录_第40张图片

 

再编辑GameManager脚本。

Unity 3D官方教程——Tanks!学习记录_第41张图片

Unity 3D官方教程——Tanks!学习记录_第42张图片

Unity 3D官方教程——Tanks!学习记录_第43张图片

Unity 3D官方教程——Tanks!学习记录_第44张图片

Unity 3D官方教程——Tanks!学习记录_第45张图片

 

 

8.音频管理

Hierarchy下GameManager下添加Audio Source组件,audioclip选择BackgroundMusic,勾选Play On Awake和Loop。

Assets下新建文件夹AudioMixer文件夹,再在该文件夹下新建混音器AudioMixer并命名为MainMix,双击打开。

先在Master下新建3个子对象用来给音频分组,3个组分别命名为Music,SFX,Driving(如果不能命名的话先点播放测试下游戏再停止测试就好了,这是Unity的BUG)。

Unity 3D官方教程——Tanks!学习记录_第46张图片

 

将预制件Tank的第一个Audio Source的OUTPUT选为Driving(注意选MainMix下的,而不是CompleteMix),第二个选为SFX。ShellExplosion下的audio output选为SFX,TankExplosion依旧选为SFX,GameManager下的选为Music。

Unity 3D官方教程——Tanks!学习记录_第47张图片

 

然后为Music点击Add添加Duck Volume(回音效果),SFX点击Send添加发送器,将SFX上的Send中Receive(接收方)选为Music\Duck Volume,将Send level设为0DB( 意味着只是播放SFX触发Music所设置的一系列回音效果,SFX本身不变)。

Unity 3D官方教程——Tanks!学习记录_第48张图片

 

点回到Music,将Threshold(回音大小)设为-45DB,Ratio设为250%(回音与音量的比例),Attack Time设为0(即触发所需要的时间)。也就是当SFX播放时,背景音变小,且有回音。

Unity 3D官方教程——Tanks!学习记录_第49张图片

 

保存好游戏,完成!

你可能感兴趣的:(•【完整项目】)