需求:

玩家有初始生命;

被敌人攻击后:掉血,播放受击音效,红屏(用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. HttpClient4.3教程 第二章 连接管理

    2.1.持久连接 两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间.Http连接需要的三次握手开销很大,这一开销对于比较小的http消息来说更大.但是如果我们直接使用已 ...

  2. newWindow 弹出的新窗口居中显示

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  3. easy ui datagrid 数据分页

    参照easyui官方网站提供的demo写了个datagrid数据分页的demo, 具体参数我就不一一罗列了,详细见官方网站, 这里只介绍一下具体的注意事项和常乃用到的几项, $('#test').da ...

  4. AFN访问https设置

    AFN访问https的时候需要设定如下两个属性: manager.securityPolicy.allowInvalidCertificates = YES; manager.securityPoli ...

  5. win10 清理winsxs文件夹

    dism /online /cleanup-image /startcomponentcleanup /resetbase

  6. jquery.cookie中的操作之与换肤

    jquery.cookie.js的插件,插件的源代码如下: /** * Cookie plugin * * Copyright (c) 2006 Klaus Hartl (stilbuero.de) ...

  7. DiskLrucCache使用Demo(强烈推荐,非常好用)

    DiskLrucCache使用的Demo,这个demo是从网络获取一张图片,保存到本地缓存中(sdcard和内存),当下载成功后.再打开不会又一次向网络请求图片.而是世界使用本地资源. 要使用Disk ...

  8. 让 Vivado有Zybo Board的配置文件

    Zybo Board开发记录: 让 Vivado有Zybo Board的配置文件 由 judyzhong 于 星期三, 07/13/2016 - 10:41 发表 本文转载自:coldnew's bl ...

  9. matplotlib之极坐标系的极径网格线(rgrids)的显示刻度

    matplotlib之极坐标系的极径网格线(rgrids)的显示刻度 #!/usr/bin/env python3 #-*- coding:utf-8 -*- #################### ...

  10. linux系统的开机引导、启动流程

    固件(CMOS/BIOS) > POST 加电自检 ↓ 自举程序(GRUB)> 加载内核 ↓ 载入内核 > 驱动硬件 ↓ 启动进程 init ↓ 读取执行配置文件/etc/initt ...