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 批 ...
随机推荐
- vue 不能检测数组长度 值变化原因解析
1.vue不能检测数组长度或者值的变化 (1)数组长度变化 未检测到 <!DOCTYPE html> <html lang="en"> <head&g ...
- CSS优先级的详细解说
一.什么是CSS优先级? 所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序. 二.CSS优先级规则 既然样式有优先级,那么就会有一个规则来约定这个优先级,而这个“规则”就是本次所需要讲的重 ...
- C/C++中float和double的存储结构(转)
在C/C++中float是32位的,double是64位的,两者在内存中的存储方式和能够表示的精度均不同,目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算. ...
- 面向对象知识点之statickeyword的使用
<?php /*由static定义的属性和方法称为静态成员和静态方法.static定义的属性和方法是属于类的,在对象之间共享.*/ /*比如能够通过定义一个静态变量来统计类实例化了多少个对象*/ ...
- Sphinx-PHP使用Sphinx搜索技术
Sphinx继承到PHP程序中, 有两种方式: Sphinx PHP模块: 编译生成PHP扩展模块 Sphinx API类: 直接使用Sphinx提供的类即可 首先我们应该使用Sphinx做以下几件事 ...
- Linux 目录和文件操作
Linux常用命令--目录和文件操作 [目录]删除.复制.移动 : 1.删除文件夹用:rmdir 文件夹名 但是rmdir不能删除非空的文件夹,那如何删除非空文件夹呢: 2.通常情况下,删除文件用:r ...
- Linux命令-网络命令:lastlog
last 显示所有用户最后登录信息(会显示系统用户) last -u 只看某一个用户wangyunpeng的最后登录信息 last -u 查看系统用户root的最后登录信息 root用户的ID是0.从 ...
- CI框架源代码阅读笔记7 配置管理组件 Config.php
原文见这里:http://www.cnblogs.com/ohmygirl/p/CIRead-7.html 一个灵活可控的应用程序中,必定会存在大量的可控參数(我们称为配置),比如在CI的主配置文件里 ...
- pandas DataFrame 数据处理常用操作
Xgboost调参: https://wuhuhu800.github.io/2018/02/28/XGboost_param_share/ https://blog.csdn.net/hx2017/ ...
- django中使用POST方法报错 URL via POST, but the URL doesn't end in a slash
该方式是因为URL路径没有使用slash(斜线"/")结尾造成的. 因此在使用POST的JavaScript函数的路径参数中,路径URL必须使用/结尾.