Unity 3D官方教程——Tanks!学习记录
1.游戏界面基础设置
为了在官方资源商店引入 Tank!的所有资源(其中导入方式已在 Survival Shooter 中详细说明),创建新的 _Scenes 文件夹,并将新场景命名为 Main 后进行保存操作。
删除Hierarchy下系统自带的Directional Light。
在Prefab文件夹中打开LevelArt预制件并导入至层级树状图中并重置设置。随后,在Window子菜单中打开Lighting视图,并取消勾选自动渲染选项以及Baked GI(不需要全局静态光照烘焙)。将Precomputed Realtime GI参数中的Realtime Resolution设置为0.5像素/单位实时光照烘焙。接着,将Ambient Source设为单一色调(即用单色而非天空盒处理环境光),并将Ambient Color设置为(0.282, 0.243, 0.443)。最后点击Build按钮以应用以上设置。如果第一次运行烘焙会稍显缓慢,请耐心等待完成。

主相机的设置如下:首先单击位于Hierarchy菜单中的MainCamera选项。接着将Position字段设置为(-43.1.2.1),Rotation字段设定为(41°.61°.1°),并将Projection类型更改为正交投影(Orthographic)。此外,在Clear Flags属性中选择Solid Color选项即可实现屏幕上未绘制区域显示背景色的功能,并将其应用到Background颜色设定中,默认值设定为此处指定的颜色值组编号即可完成背景颜色的配置

2.游戏对象tank的创建和控制
打开Model文件夹中的内容,并定位到所需的Tank模型。
随后,请将此对象拖入Hierarchy层级树中,并对其进行重置操作。
接下来,请将此Tank模型的Layer属性设置为Player角色。
需要注意的是,在后续的操作中仅针对当前对象及其子对象不触发效果。
在此基础上,请依次添加rigidbody组件,并冻结position-y以及rotation-x和rotation-z轴以实现平移与旋转功能。
随后,在Hierarchy树中添加一个Box collider组件,并将其中心坐标设置于(0, 0.85, 0)位置。
大小参数设定为(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子对象下,并将其复制至 Tank子对象下。其中一个命名为 Left DUST TRIAL ,并设定其位置参数为 (-0.5, 0, 0.75);另一个命名为 Right DUST TRIAL ,并设定其位置参数为 (0.5, 0, -0.75)。

导入代码促使坦克开始运行,在...标记处插入必要的控制逻辑以实现其移动功能



在保存文件后导入Unity环境中,在编辑器窗口中拖放 TankMovement 到 Tank 对象中,并按照需求配置好所需的脚本对象及变量参数设置

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

3.摄像机设置
在Hierarchy中创建一个名为CameraRig的空对象,并将其旋转属性重置至初始值(40°, 60°, 0°)。然后将一个称为Main Camera的对象拖入CameraRig中作为子对象,并将其位置设置为(0, 0, -60)。

请将位于Cameras目录下的CamerasController源代码文件导入CamerasRig环境中,并进行修改。



保存后回到unity将Tank拖入脚本里的Targets下。
4.tank生命值设置
先将坐标模式设置为Pivot与Local。接着创建滑条(Hierarchy→Create→UI→Slider)。在之前的讨论中,在survival shooter中已经介绍过创建任何UI组件的方法:系统会自动生成Canvas和Eventsystem。双击EventSystem窗口后:将其更改为HorizontalUI;同样地:将其更改为VerticalUI。(这是因为玩家无需手动调整进度条:而Horizontal轴与Vertical轴则分别用于控制坦克的前后位置)

再次点击Canvas并切换至World space模式,在Overlay选项中设置为'Screen'模式以调整场景尺寸和分辨率,在此过程中相应的画布也会随之自动调整。随后,在Scaling Factor设置中将数值修改为1以确保每个渲染单位对应的实际像素数为1个像素。接着将当前的画布拖入 Tank 容器中作为其子对象,并通过拖动 Tank 容器来同步调整画布的位置。在完成以上设置后,请您依次执行以下操作:一是将画布的位置参数设定为(0, 0.1, 0);二是调整缩放比例以及旋转角度分别设为90度,并选择沿X轴方向进行旋转;最后双击进行焦点对焦操作即可观察到当前的Draw Mode能够完美地围绕在 Tank 容器周围。

单击滑块并移除handle区域(无需安装按钮);按住Shift键并再次单击Fill以选中滑块及其子对象;选择Anchors预设项后按住Alt键以覆盖所有相关对象。

将名为Slider的控件重命名为 Health Slider,并禁用 Input 字段。设置 Transition 属性为 None 以禁用滑条染色功能。将 Max Value 设置为 100 并将其置于右侧边缘位置。点击 Health Slider 的 Background 部分,在 Source Image 中选择 Health Wheel,并将 Alpha 通道设置为 80%。对于 Fill 部分,在 Source Image 中同样选择 Health Wheel,并将 Alpha 通道调整至 150%,同时设置 Image Type 为 Filled 并选择 Fill Origin 在左侧端点位置,并且禁用 Clockwise 检查框以避免逆时针填充模式的操作。



在Scripts文件/ folder中的Files/folder中导入UIDirection script到HealthSlider组件中。此操作是为了固定滑动条(slider)的角度以避免其随 HealthSlider组件转动而产生视觉疲劳。(healthslider的父对象是canvas)

在Hierarchy面板中选择名为‘Tank’的对象,在继续点击Apply按钮以将更改应用到Prefabs中。然后点击Hierarchy面板中的对象并拖拽至右侧的Tree视图(注意不要拖拽 tank 对象)。接着,在 Tree 视图中找到位于 Prefabs层级中的 TankExplosion 拖拽至Hierarchy面板中(注意不要拖拽 tank 对象)。在 TankExplosion 中添加音频源,并将其类型设置为 TankExplosion 音频类型;请勿勾选‘立即播放’和‘无限循环’选项;最后点击 Apply 按钮以保存更改并完成操作后,请删除 Hierarchy 面板中的 TankExplosion 对象

将TankHealth脚本拖入Tank


切换至Unity引擎后,请将所有与TankHealth相关的引用添加进去,并请确保点击 Tank 的 Apply 按钮以完成同步修改。

5.炮弹shells设置
拖入位于Models文件夹中的Shell模型至Hierarchy中。随后,在该模型上附加一个Rigidbody组件(该组件赋予其重力属性以使炮弹自动下落)。接着新增一个CapsuleCollider组件到场景中,并勾选IsTrigger属性选项以便允许此类物体被坦克穿透。最后将CapsuleCollider的中心点置于坐标原点上方2个单位处,并将该物体的半径设定为0.15米;同时将其长度设置为0.55米以保证应有的形态特征。

将位于Prefabs中的ShellExplosion拖入到当前工作区的Shell中,并将其设为子对象;随后,在子对象ShellExplosion中新增一个Audio Source组件;将AudioClip设为 ShellExplosion音频源;关闭 "自动播放" 和 "循环播放" 选项;接着在返回 Shell 之前,在其内部新增一个 Light 组件并配置使其模拟爆炸效果;最后将位于 Prefabs 中的 ShellExplosion脚本拖入到当前工作区的 Shell 并对其进行编辑设置


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

最后我们将设置好的Shell导入到Prefabs文件夹并将其中的Shell标记为预制件同时在Hierarchy中执行相关操作以移除不必要的Shell
6.发射炮弹
首先,在指定位置设置炮弹发射点,并在 Tank 区域内新建一个空对象命名为 FireTransform。该对象的位置参数设置为 (0, 1.7, 1.35),旋转参数设定为 (350°, 0°, 0°)。接着,在 Canvas 区域内新增一个滑动条并命名为 AimSlider,并删除其背景及句柄区域。选定 AimSlider 后取消交互模式勾选项,并将过渡效果设置为无(Transition: None),选择从底端到顶端的滑动方向(Direction: Bottom To Top),并将最小值设定为 15、最大值设定为 30。

选择AimSlider并配置其子对象中的FIll Area选项(不选择Fill选项),通过按住Alt键全选所有设置,并指定区域为右下方。

按下Fill键,并将Height字段设置为0。然后选择主射方向字段设置为主射方向。选择Aimslider并双击锁定焦点。自行测试确定位置或者按照以下参数设置:Left=1, Right=1, Top=-9, Bottom=3, Pos Z=-1。

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



在保存后返回Unity时,请将引用TankShooting的所有内容导入;同时需确保AudioSource设置为第二个选项;其中第一个参数用于控制引擎声音切换。

完成之后,请选择‘Tank’并执行‘Apply’操作以使其生效。保存之后进行测试时,坦克应当能够同时移动和发射(若出现问题,请回到编辑器中的项目设置部分进行检查)。请确保在完成上述操作之后删除位于HIERARCHY列表中的‘Tank’节点。
7.游戏流程控制
创建一个新的空对象,并将其命名为SpawnPoint1。设置其Position坐标为(-3,0,30),并指定Rotation参数值为(0,180,0)。同时设置其Label颜色选项为蓝色。另创建一个空对象,并将其命名为SpawnPoint2。设置其Position坐标值为(13,0,-5),并指定Rotation参数值组别为(0,0,0)。这两处位置将分别作为两辆坦克的起始点。

在UI编辑器中新建一个Text组件(或选择Text工具),系统会自动创建一个新的Canvas(每个Hierarchy只能包含一个唯一的Canvas,默认情况下该对象是Tank组件的子对象)。命名为MessageCanvas后,默认状态下左、右、上、下边界分别设为0,并设置Anchors Min值为(0.1, 0.1)、Anchors Max值为(0.9, 0.9)以限制显示区域。双击该Text组件后将内容修改为"TANKS!"并选中Best Fit适配模式(根据屏幕尺寸自动缩放),随后将最大尺寸设置为60像素并将背景颜色设置为白色以确保显示效果最佳。

在Text对象上附加阴影效果(通过菜单UI→Effects→Shadow来实现),其中颜色通道设置为RGB A值(114,71,40,128),阴影效果距离设定为3单位正方向和-3单位负方向。单机相机设置为Size 0(因为已移除背景物体 tank),打开CameraControl脚本文件,并恢复未编辑的状态。
创建一个新的空对象并将其命名为GameManager后,默认打开该GameManager脚本文件至工作区中,并导入该ManagerInterface脚本文件至工作区中以完成配置。系统会自动识别所有引用内容并进行初始化设置。两种颜色模式分别是无渐变色(42%, 100%, 178%, 0%)和无渐变色(229%, 46%, 40%, 0%)。

在GM脚本中完全包含了TM脚本(其中TM被定义为GM的直接继承体),因此TM无需被导入到任何游戏对象中,并且TM无需继承MonoBehaviour(即直接调用其start和update方法)。基于此逻辑,我们接下来深入分析TM脚本的行为模式。


再编辑GameManager脚本。





8.音频管理
在Hierarchy层次结构中的GameManager界面中新增Audio Source组件,在其属性中设置audioclip为BackgroundMusic,并勾选启用自动播放功能以及循环播放选项
创建位于Assets目录下的子文件夹,并命名为AudioMixer。然后,在此子文件夹中新增一个名为MainMix的音频混合器。最后,双击启动该音频混合器。
在Master界面中创建三个子对象用于音频分组,在创建好的三个子对象中分别命名为Music、SFX和Driving(若无法为这些子对象命名,请先启动游戏并播放相应音效后立即停止测试——这属于Unity的一个已知问题)。

请在【

然后,在音乐轨道上启用回音效果(Duck Volume),接着在Effect Strip(效果条)上启用发送器效果(Send)。在Effect Strip上将接收设置为Music\d Duck Volume,并将Send level调整为0DB(这表示仅播放触发音乐所配置的一系列回音效果,并不会影响原始SFX内容)。

切换到音乐界面,在声学效果选项中进行以下设置:将Threshold(回声大小)参数设置为-45分贝,并将其比例因子(Ratio)设定为250%;攻击时间(Attack Time)则设置为零。The result is that when the SFX effect is activated, the ambient sounds will diminish in volume while simultaneously introducing a noticeable echo effect.

保存好游戏,完成!
