需求:

玩家有初始生命;

被敌人攻击后:掉血,播放受击音效,红屏(用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学习笔记(六.玩家生命)的更多相关文章

  1. Maven学习笔记(六):生命周期与插件

    何为生命周期:      Maven的生命周期就是为了对全部的构建过程进行抽象和统一.Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完好的.易扩展的生命周期.这个生命周期包括了项目的清 ...

  2. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  3. Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  4. Typescript 学习笔记六:接口

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  5. python3.4学习笔记(六) 常用快捷键使用技巧,持续更新

    python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...

  6. Go语言学习笔记六: 循环语句

    Go语言学习笔记六: 循环语句 今天学了一个格式化代码的命令:gofmt -w chapter6.go for循环 for循环有3种形式: for init; condition; increment ...

  7. 【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  8. Linux学习笔记(六) 进程管理

    1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...

  9. MAVEN学习笔记之Maven生命周期和插件简介(3)

    MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...

  10. # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)

    目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...

随机推荐

  1. 坑爹的Adprep32.exe

    今天看书的时候,看到用ADSI设置Universal Group Membership Caching,就想到用.Net Framework来实现,找了半天,才找到System.directoryse ...

  2. Android Exception 9(requestFeature() must be called before adding content)

    08-05 17:36:12.799: W/System.err(10378): java.lang.reflect.InvocationTargetException08-05 17:36:12.7 ...

  3. Android设计模式(八)--模板方法模式

    到国美面试Android的时候.问我的设计模式相关的问题: 1.单例模式的意义时什么. 2.有哪几种工厂方法模式: 3.你用过的模板方法模式.举例说明: 自己感觉答的一塌糊涂. 模板方法模式都没说出来 ...

  4. ISA95的抽象惯例

    要想理解ISA95.而且应用到设计中去.就要理解ISA95背后的抽象模式,以下这个图是我依据我对ISA95的理解画出来的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...

  5. (五)Lucene——中文分词器

    1. 什么是中文分词器 对于英文,是安装空格.标点符号进行分词 对于中文,应该安装具体的词来分,中文分词就是将词,切分成一个个有意义的词. 比如:“我的中国人”,分词:我.的.中国.中国人.国人. 2 ...

  6. 【干货】电路设计师指导手册(已更新完毕)(转载EDN)

    [干货]电路设计师指导手册(已更新完毕) 第一部分:接地与布线第二部分:电源返回路径与I/O信号接地第三部分:板间互连.星形接地及屏蔽第四部分:安全地以及电线/电缆第五部分:射频电缆.双绞线与串扰

  7. resin设置jvm参数

    http://www.quiee.com.cn/archives/592/ resin resin3.0 及前期版本内存设置, 如下: 启动时设置虚拟内存: unix> bin/httpd.sh ...

  8. JS经验库

    1.IE状态栏无法结束的问题 function clearStatusBar(){ this.bd = document.body; this.tmp = document.creatElement( ...

  9. 关于wxpy,使用Python玩转微信的问题

    在github上下载了,安装了之后在idle上运行,好像是说Python不能上网.新手求助.现在问题已经解决,是ssl 证书的问题,不能用最新的 复制内容到剪贴板 代码: sudo pip unins ...

  10. DataURL与File,Blob,canvas对象之间的互相转换的Javascript (未完)

    canvas转换为dataURL (从canvas获取dataURL) var dataurl = canvas.toDataURL('image/png'); var dataurl2 = canv ...