SurvivalShooter学习笔记(六.玩家生命)
需求:
玩家有初始生命;
被敌人攻击后:掉血,播放受击音效,红屏(用UI图片做)闪烁提示,UI面板刷新生命
直至死亡:死亡播放死亡音效,游戏结束;
1.变量:
玩家生命
public int startingHealth = 100; // 初始生命值
public int currentHealth; // 当前生命
组件:
public Slider healthSlider; // 玩家生命条UI
Animator anim; // 玩家身上动画状态机
AudioSource playerAudio; // 玩家身上音效组件
PlayerMovement playerMovement; // 玩家移动组件
PlayerShooting playerShooting; // 玩家攻击组件
状态bool:
bool isDead; // 玩家是否死亡
bool damaged; // 玩家受击后设置为True
受击红屏闪烁:
public Image damageImage; // 受击后全屏显示的图片(半透的红图,真实感;初始设为全透明)
public float flashSpeed = 5f; // 受击图淡入淡出速度
public Color flashColour = new Color(1f, 0f, 0f, 0.1f); // 受击图显示的颜色,半透
2.初始化组件:
void Awake ()
{
anim = GetComponent <Animator> ();
playerAudio = GetComponent <AudioSource> ();
playerMovement = GetComponent <PlayerMovement> ();
playerShooting = GetComponentInChildren <PlayerShooting> (); currentHealth = startingHealth;
}
3.在Update中,根据damaged状态显示受击红屏闪烁:
void Update ()
{
// 如果受击了,这一帧显示受击提示颜色;下一帧从当前颜色插值清除
if(damaged)
{
//设置受击图片的颜色为受击提示的颜色:半透红
damageImage.color = flashColour;
}
else
{
// 以flashSpeed速度 插值清除受击图片颜色到0,0,0,0
damageImage.color = Color.Lerp (damageImage.color, Color.clear, flashSpeed * Time.deltaTime);
} //重置受击状态
damaged = false;
}
4.玩家受伤:
public void TakeDamage (int amount)
{
//设置受伤变量为True,红屏闪烁后再恢复
damaged = true; // 减去受击生命
currentHealth -= amount; //UI面板显示
healthSlider.value = currentHealth; //播放受击音效
playerAudio.Play (); // 没血了,死亡,调用死亡函数
if(currentHealth <= 0 && !isDead)
{
Death ();
}
}
5.玩家死亡:
void Death ()
{
// 设置死亡状态为True,避免重复调用Dead函数(状态变量好处!!)
isDead = true; // 关闭未播放完的玩家攻击的特效
playerShooting.DisableEffects (); //切换动画状态机到死亡
anim.SetTrigger ("Die"); // 切换音效为死亡音效并播放
playerAudio.clip = deathClip;
playerAudio.Play (); // 禁用玩家移动和射击组件,不可再移动和攻击
playerMovement.enabled = false;
playerShooting.enabled = false;
}
这里的playerShooting.DisableEffects ()做的是这样的事情:禁用了LineRenderer组件、Light点光源组件
6.重新开始:(游戏结束重新加载场景)
这里做法和敌人死亡一样,都是在死亡动画中加了事件,调用方法;主角死亡动画播放完时候进入这个事件重新加载场景。
public void RestartLevel ()
{
SceneManager.LoadScene (0);
}
SurvivalShooter学习笔记(六.玩家生命)的更多相关文章
- Maven学习笔记(六):生命周期与插件
何为生命周期: Maven的生命周期就是为了对全部的构建过程进行抽象和统一.Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完好的.易扩展的生命周期.这个生命周期包括了项目的清 ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记六:接口
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- python3.4学习笔记(六) 常用快捷键使用技巧,持续更新
python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...
- Go语言学习笔记六: 循环语句
Go语言学习笔记六: 循环语句 今天学了一个格式化代码的命令:gofmt -w chapter6.go for循环 for循环有3种形式: for init; condition; increment ...
- 【opencv学习笔记六】图像的ROI区域选择与复制
图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
- MAVEN学习笔记之Maven生命周期和插件简介(3)
MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...
- # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)
目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...
随机推荐
- sql jion
A Visual Explanation of SQL Joins I thought Ligaya Turmelle's post on SQL joins was a great primer f ...
- android与服务端通讯时使用到的GZIP压缩及解压
为了减小android项目与服务端进行通讯时的数据流量,我们可以使用GZIP对服务端传输的数据进行压缩,在android客户端解压.或在客户端压缩,在服务端解压.代码如下: android客户端的GZ ...
- 13-spring学习-class类型表达式
Class表达式 spring中对于class反射机制也有自己的处理. 1,class::使用T(类名)的形式可以取得一个指定泛型类型的Class对象. 范例: package com.Spring. ...
- 用MyEclipse10.0远程连接Mysql数据库服务器
说明:本文档所有的操作均在满足以下条件的情况下操作, A.远程Linux服务器已经安装好MySQL数据库 B.本地电脑可以ping通远程服务器 C.已经成功安装了Myeclipse 一.下载mysql ...
- JS关于scrollTop和可视区域clientWidth
一.scrollTop,scrollLeft 要获得页面的scrollTop及scrollLeft,在不同的浏览器中是不一样的: 谷歌浏览器和没声明DTD的文档,通过document.body.scr ...
- 转: Tsung:开源多协议分布式负载&压力测试工具
Main features High Performance: the load can be distributed on a cluster of client machines Multi-pr ...
- Tcp Ip -- tcpdump win窗口大小
问题介绍 今天,有内部模块与外部系统断连. (外部系统smgw,内部接口interface) smgw <----> interface 有消息交互. 通过tcpdump -xns0 po ...
- 王兴内部讲话:为什么中国To B企业都活得这么惨
本文节选自美团创始人王兴内部讲话.在讲话中,王兴罕见地分享了他对全球和中国宏观经济的理解,谈了他对 TO B 业务的深度思考.全文近 15000 字,干货非常多,值得你花时间阅读. 我们今天讲一下餐饮 ...
- Editplus 文件中批量搜索字符串的技巧
常规情况下,我们利用Crtl+F可以在文档中查找字符串,进行替换等操作. 但要有的时候,我们要在大量文件中做这种查找操作,显然,一个个的打开文档是不现实的. 比如: 最近,谷歌被墙的很厉害,导致很多w ...
- vue的组件(先学习其他的ES6知识,之后再看这个) (未完)
https://blog.csdn.net/qq20004604/article/details/56965703