《杜增强讲Unity之Tanks坦克大战》7-坦克血条
7 坦克血条
点击菜单GameObject->UI->Slider创建Slider
选中EventSystem,设置Horizontal Axis为HorzontalUI,Vertical Axis为VerticalUI
选中Canvas,设置Render Mode为World Space, Reference Pixels Per Unit为1
将Canvas拖到Tank中,使其成为Tank的子对象,相关参数设置如下
将Slider改名为HealthSlider,取消选择Interactable,设置Transition为None,Max Value改为100
在Hierarchy里面,按住Alt键点击HealthSlider前面的三角箭头
然后删除Handle Slide Area
同时选中HealthSlider,Background,FillArea,Fill, 点击Rect Transform里面的Sketch,按着Alt键选中右下角的水平垂直拉伸.
选中Background,设置Source Image为Health Wheel,Color为红色,Alpha为80
选中Fill,设置Source Image为Health Wheel,Color为绿色,Alpha为150,Image Type为Filled,Fill Method为Radial 360,Fill Origin为Left,取消选择Clockwise.
[图片上传中...(image-d0dada-1539997823498-3)]
新建Health.cs,声明float变量currentBlood为当前血值.
public float currentBlood = 100; // 当前血值
添加healthSlider显示当前血值
public Slider slider; // 血槽
为Health.cs添加TakeDamage方法
public void TakeDamage (float damage) { // 受到伤害,开始掉血
currentBlood -= damage; // 掉血 slider.value = currentBlood; // 更新血槽显示 }
当坦克收到伤害,血值不断减少到小于等于0的时候,坦克播放爆炸效果和爆炸音效.
从Prefabs里面找到TankExplosion坦克爆炸效果添加到坦克上面
private ParticleSystem ps; // 爆炸效果
private AudioSource audioSource; // 声源
还需要添加一个爆炸音效
public AudioClip explosionAudio; // 爆炸音效
[图片上传中...(image-a2ce6e-1539997823498-1)]
在Start里面获取ps和audioSource
ps = GetComponentInChildren <ParticleSystem> (); // 获取子对象的ParticleSystem
audioSource = GetComponent<AudioSource> (); // 获取音源
然后在血值减为0时播放爆炸效果
if( currentBlood <= 0){
ps.transform.parent = null; // 将爆炸效果从Shell里面移出 ps.Play (); // 播放爆炸效果 audioSource.Play (); // 播放爆炸音效 Destroy (ps.gameObject, ps.duration); // 爆炸效果播放完毕之后移出爆炸效果的gameObject Destroy (gameObject); // 移出Shell的gameObject }
最终代码
[图片上传中...(image-fcf493-1539997823497-0)]
Health.cs
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Health : MonoBehaviour {
public Slider slider; // 血槽 public float currentBlood = 100; // 当前血值 private ParticleSystem ps; // 爆炸效果 private AudioSource audioSource; // 声源 public AudioClip explosionAudio; // 爆炸音效 // Use this for initialization void Start () { ps = GetComponentInChildren <ParticleSystem> (); // 获取子对象的ParticleSystem audioSource = GetComponent<AudioSource> (); // 获取音源 } public void TakeDamage (float damage) { // 受到伤害,开始掉血 currentBlood -= damage; // 掉血 slider.value = currentBlood; // 更新血槽显示 if( currentBlood <= 0){ ps.transform.parent = null; // 将爆炸效果从Shell里面移出 ps.Play (); // 播放爆炸效果 audioSource.Play (); // 播放爆炸音效 Destroy (ps.gameObject, ps.duration); // 爆炸效果播放完毕之后移出爆炸效果的gameObject Destroy (gameObject); // 移出Shell的gameObject } }
}
---------------------------我是目录分割线---------------------------
《杜增强讲Unity之Tanks坦克大战》4-坦克的移动和旋转
《杜增强讲Unity之Tanks坦克大战》9-发射子弹时蓄力
《杜增强讲Unity之Tanks坦克大战》11-游戏流程控制
---------------------------我是目录分割线---------------------------
《杜增强讲Unity之Tanks坦克大战》7-坦克血条的更多相关文章
- 《杜增强讲Unity之Tanks坦克大战》10-相机控制
10 相机控制 本节主要学习如何控制相机自动调整位置和焦距,使两个坦克一直同时在视野内. image 在Hierarchy点击右键 image 点击 Create Empty,生成空对象,改名 ...
- 《杜增强讲Unity之Tanks坦克大战》11-游戏流程控制
11 游戏流程控制 使用协程来控制游戏流程 11.1 添加MessageText 首先添加一个Text来显示文字 image 设置GameMgr image 11.2 游戏整体流程 下面Gam ...
- 《杜增强讲Unity之Tanks坦克大战》9-发射子弹时蓄力
9 发射子弹时蓄力 实现效果如下 image 按下开火键(坦克1为空格键)重置力为最小力,一直按着的时候蓄力,抬起的时候发射.如果按着的时候蓄力到最大,则自动发射,此时在抬起则不会重复发射. 首先 ...
- 《杜增强讲Unity之Tanks坦克大战》4-坦克的移动和旋转
4 坦克移动和旋转 本节课的目标是实现同时wsad和上下左右控制两个坦克分别移动和旋转 4.1 本节代码预览 image 将上节课场景s2另存为s3. 4.2 添加车轮扬沙效果 从Prefabs里 ...
- 《杜增强讲Unity之Tanks坦克大战》1-准备工作
0.案例介绍 0.1开始界面 点击Play Now 进入游戏界面 左边的坦克使用ws控制前后移动,ad键左右旋转,空格键开火 右边的坦克使用方向键上下控制前后移动,方向键左右键实现左右旋转 ...
- 《杜增强讲Unity之Tanks坦克大战》2-场景设置
2 场景设置 2.1 本节效果预览 2.2 项目目录设置 点击Project面板的Create按钮,在根目录下面新建wm文件夹 Wm文件夹用于存放我们自己生成的Prefab和脚本等其他资源, ...
- 《杜增强讲Unity之Tanks坦克大战》3-添加坦克
3 添加坦克 3.1 本节效果预览 3.2 另存新场景 首先打开上次的场景s1,另存为s2,放到同一个文件夹下面. 3.3 添加坦克模型 在Model文件夹下面找到Tank模型 将Tank ...
- 《杜增强讲Unity之Tanks坦克大战》5-子弹
5 子弹 本节的任务是创建子弹的Prefab image 首先从Model/Shell找到子弹的模型,拖入Hierarchy中,添加刚体组件,所有属性默认值. 添加Capsule Collider ...
- 《杜增强讲Unity之Tanks坦克大战》6-发射子弹
6 发射子弹 本节完成发射子弹的功能,最终代码如下: image 首先,发射子弹得确定发射的位置和方向,还有发射的初始速度.具体的发射速度和按下发射按键的时间长短有关,这个关于子弹的蓄力我们在第九 ...
随机推荐
- JavaScript计算指定日期与当前日期的相差天数
java中处理2个时间段相差几天很容易,直接调相关方法就行,不过js处理这类问题稍微有点不易,项目开发中也用到了,如下: 1 2 3 4 5 6 7 8 9 10 11 12 //计算两个日期天数差的 ...
- Java基础知识强化之集合框架笔记79:HashMap的实现原理
1. HashMap的实现原理之 HashMap数据结构: HashMap是对数据结构中哈希表(Hash Table)的实现, Hash表又叫散列表.Hash表是根据关键码Key来访问其对应的值Val ...
- ARC与Toll-Free Bridging
arc模块与mrc模块的沟通. 相当于程序的混编处理. Toll-Free Briding保证了在程序中,可以方便和谐的使用Core Foundation类型的对象和Objective-C类型的对象. ...
- SQLite加密方式 [转]
关于SQLite SQLite是一个轻量的.跨平台的.开源的数据库引擎,它的在读写效率.消耗总量.延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如iOS.Android). ...
- CAN--UART的协议转换器
CAN--UART的协议转换器 //------------------------------------------------------// CAN <==> UART的协议转换 ...
- CSS 学习路线(一)元素
元素(element) 类型:替换和非替换元素 替换元素(replaced element): 用来替换元素内容的部分并非由文档内容直接显示. eg:img input 非替换元素(nonreplac ...
- iOS/OSX漏洞分析和再现:CVE-2019-7286
iOS 12.1.4是2019年2月8日发布的iOS的最新版本.该版本修补了iOS上发现的四个漏洞.根据Project Zero的Ben Hawkes的推文,其中至少有两个0day还是处于在野状态…… ...
- pc端js常用方法
var common = {}; /** * [pageMask ajax统一请求] * @return {[type]} [description] */ common.pageMask = fun ...
- AngularJS中的按需加载ocLazyLoad插件应用;
一.前言 ocLoayLoad是AngularJS的模块按需加载器.一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题.但是当我们的网站渐渐庞大起来,这样子的加载策略让网速初始化速度变得越 ...
- MongoDB Python官方驱动 PyMongo 的简单封装
最近,需要使用 Python 对 MongodB 做一些简单的操作,不想使用各种繁重的框架.出于可重用性的考虑,想对 MongoDB Python 官方驱动 PyMongo 做下简单封装,百度一如既往 ...