《杜增强讲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 首先,发射子弹得确定发射的位置和方向,还有发射的初始速度.具体的发射速度和按下发射按键的时间长短有关,这个关于子弹的蓄力我们在第九 ...
随机推荐
- 4种Java日志管理方法
java开发中常见的几种日志管理方案有以下4种: 1. Commons-logging + log4j 2. log4j 3. slf4j + log4j + commmons-logging 4. ...
- VMware三个版本号workstation、server、esxi的差别
VMware三个版本号 workstation: 单机级.用在个人桌面系统中.须要操作系统支持 servier:工作组级,用于服务器.须要操作系统支持 esxi:企业级,用于服务器,不须要操作系统支持 ...
- 【bzoj 4710】 [Jsoi2011]分特产
题目 容斥加组合计数 显然答案是 \[\sum_{i=0}^n(-1)^i\binom{n}{i}f_{n-i}\] \(f_i\)表示至多有\(i\)个人没有拿到特产 考虑求\(f\) 发现\(m\ ...
- ethereumjs/ethereumjs-common-3-test
查看test能够让你更好滴了解其API文档的使用 ethereumjs-common/tests/chains.js const tape = require('tape') const Common ...
- webbench安装和简单使用
一.安装流程 wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz tar zxvf webbench-1.5.tar ...
- ArrayList实现原理及源码分析之JDK8
转载 ArrayList源码分析 一.ArrayList介绍 Java 集合框架主要包括两种类型的容器: 一种是集合(Collection),存储一个元素集合. 一种是图(Map),存储键/值对映射. ...
- 使用jquery操作元素的css样式(获取、修改等等)
//1.获取和设置样式 $("#tow").attr("class")获取ID为tow的class属性 $("#two").attr(&qu ...
- .Net文档下载
public static void DownLoadFile(string fileName, HttpResponse Response, HttpServerUtility Server) { ...
- 【原型图】Mockplus
Mockplus 原型设计工具
- UITableViewCell的父视图
最近版本测试阶段,发现一个奇怪的问题,以前在A测试机上出现的崩溃bug,解决后今天在B测试机上又出现了,在B上解决完之后,返回到设备A上发现又不行了.最后调试发现是测试设备系统版本不同导致的,A设备是 ...