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按钮开始烘焙上面的设置。如果第一次开始烘焙,会有点慢。

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

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都取消勾选。

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

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

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

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

3.摄像机设置

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

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

保存后回到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)。

再点击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周围。

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

将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(是否顺时针)。

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

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

将TankHealth脚本拖入Tank

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

5.炮弹shells设置

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

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

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

最后将我们设置好的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。

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

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

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

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

完毕后选定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),标签选为红色。这将是两辆坦克的出生点。

新建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,颜色选为白色。

为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).

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

再编辑GameManager脚本。

8.音频管理

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

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

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

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

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

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

保存好游戏,完成!

Unity 3D官方教程——Tanks!学习记录相关推荐

  1. Unity 3D 官方教程—— 2D Physics系列 学习记录

    1.2D Physics Overview 1.2D Physics游戏对象和3D Physics游戏对象可共存在一个场景,但是它们不能相互反应(interact with each other). ...

  2. Unity 3D官方教程——Adventure Game学习记录

    1.Interactable System: 1.Picture Interactable:Player走到SecurityRoom墙前的那张画 2.Fish Interactable鱼档前的交互 3 ...

  3. unity官方教程-TANKS(一)

    unity官方教程TANKS,难度系数中阶. 跟着官方教程学习Unity,通过本教程你可以学会使用Unity开发游戏的基本流程. 一.环境 Unity 版本 > 5.2 Asset Store ...

  4. Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D C#: Learn To Code Making 3D Games

    Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D & C#: Learn To Code Making 3D Games Full Guide To Unit ...

  5. Unity游戏优化[第二版]学习记录4

    Unity游戏优化[第二版]学习记录4 第4章 着手处理艺术资源 一.音频 1.导入音频文件 2.加载音频文件 3.编码格式与品质级别 4. 音频性能增强 二.纹理文件 1.纹理压缩格式 2.纹理性能 ...

  6. Unity游戏优化[第二版]学习记录6

    以下内容是根据Unity 2020.1.01f版本进行编写的 Unity游戏优化[第二版]学习记录6 第6章 动态图形 一.管线渲染 1.GPU前端 2.GPU后端 3.光照和阴影 4.多线程渲染 5 ...

  7. 《廖雪峰Git教程》学习记录

    <廖雪峰Git教程>学习记录 作者:婷婷 摘要:这段时间学习了廖雪峰老师的Git教程,廖老师已经写得非常易懂了,本人在此处记录了学习到的在windows环境下Git的基本用法,写此博客,便 ...

  8. 官方教程Stealth学习笔记(一)

    今天开始要更新官方教程stealth的学习笔记啦, 我将会记录和讲解一个小游戏主要的流程和关键地方的技巧. 我会按照官方教程的顺序来更新. 秘密潜入 1设置游戏系统                  ...

  9. 【OpenMMLab实践】01MMSegmentation官方教程实现过程记录(mmcv,mmsegmentation,torch)

    本文主要根据mmsegmentation的官方教程(教程链接在这里),并且看了b站的视频,一步步实现代码中的demo教程,主要包含以下两方面的功能: 通过MMSeg加载预训练好的权重,输入单张图片,实 ...

最新文章

  1. 智能电视:跳出那个坑
  2. 动态规划之----最长公共子序列
  3. DCMTK:读取DICOM图像,并使用设置创建PGM位图
  4. centOS下安装jdk1.8
  5. 扩展立方体 The Scale Cube
  6. 腾讯技术运营岗实习面试面经
  7. Linux之lastb命令
  8. C++中的cin cout
  9. 老李推荐:第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数...
  10. registerClassAlias()函数和getClassByAlias()函数
  11. oracle out of bounds,如何通过不具有ArrayIndexOutOfBoundsException的executeBatch获取生成的键?...
  12. RegExp 误用解析
  13. 保持简单:纪念丹尼斯•里奇
  14. C4D怎么设置默认工程默认场景?
  15. Apple Pencil 拆解一代 -1212
  16. 全年爆文率14%+,这个小红书品牌的内容营销密码是什么?
  17. Math.cbrt() Math.sqrt() Math.pow()
  18. 招商银行的“金融+知识”:知其然,更要知其所以然
  19. 2022年资料员-岗位技能(资料员)操作证考试题模拟考试平台操作
  20. WF(Workflow foundation)与Asp.net结合(二)

热门文章

  1. 理解Schnorr签名算法
  2. 计算机985专硕还是211学硕好,985专硕和211学硕哪个更值得读
  3. 双向可控硅过零触发电路
  4. 2022国自然中标至少1篇1区代表作?没中接下来怎么办?
  5. C语言的scanf函数在visualstudio中的错误
  6. 游戏推广中买量和导量是什么意思?
  7. 【摸鱼神器】基于python的BOSS识别系统
  8. Impala 三大组件:Impala Daemon, Impala Statestore, Impala Catelog
  9. grep -w和grep -e使用
  10. 【性能测试】linux服务器监控性能测试