《杜增强讲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 首先,发射子弹得确定发射的位置和方向,还有发射的初始速度.具体的发射速度和按下发射按键的时间长短有关,这个关于子弹的蓄力我们在第九 ...
随机推荐
- APP案例分析-摩拜单车app
第二次作业-App案例分析 本次案例分析选用的是 摩拜单车IOS5.7.5版本 测试环境为 IPhone 6s (IOS11.0.1,含有3DTOUCH功能).本次案例分析仅针对APP 而言,并不涉及 ...
- awk.md
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的行编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分 ...
- Codeforces 1130 E.Wrong Answer 构造
题目要求构造一组数据使得题目给出代码的anwser和正确答案恰好相差k,我们记题目给出代码的输出为ans1,正确答案为ans2. 我们假设已经有总和为s的p个正数,使得此时的ans1=ans2=s*p ...
- IPython学习笔记(一)
开始看<利用python进行数据分析>这一本书,记录下学习的点滴,对于每一个小知识点记录得过于详细,但是好记性不如烂笔头,动动手还是记得比较深刻点. 1.Tab自动补齐 输入an后按Tab ...
- vue-cli 安装失败Failed to download repo vuejs-templates/vuedemo: Response code 404 (Not Found)
还原问题现场: 第一次使用vue init webpack projectName的时候,由于操作失误,执行了两次npm install -g vue-cli,然后再使用vue init webpac ...
- centos下Zabbix Agent端部署和安装
首先重复一下前面的规划 server端: 192.168.136.144 centos6.5 (虚拟机) agent端: 192.168.136.155 centos6.5( 虚拟 ...
- iRedMail搭建完后登录提示【连接至IMAP服务器失败】(转)
http://ask.apelearn.com/question/8080(参考) ================搭建步骤如下=====================登录www.net.cn,产品 ...
- c++赋值运算符为什么要返回引用?
为什么赋值运算符要返回引用?? 因为赋值操作会改变左值,而 + 之类的运算符不会改变操作数,所以说赋值运算符重载要返回引用以用于类似 (a=b)=c 这样的再次对a=b进行写操作的表达式.+ 返回一个 ...
- Linux下onvif客户端关于ipc摄像头的搜索
设备搜索:要访问一个IPC摄像头,或者说要调用IPC摄像头提供的WEB服务接口,就要先知道其IP地址,这就是设备发现的过程,或者叫设备搜索的过程.IPC摄像头用的是239.255.255.250(端口 ...
- 关于mysql中GROUP_CONCAT函数的使用
偶然看到公司存储过程中有个字符串拼接的函数,改bug过程中使用到了,还挺有用的,于是记录下来方便记忆,帮助有需要的人. 这是我需要整理的串,他是调用了一个存储过程,传入组织机构的id和迭代层数,返回来 ...