这里先补充一个得分管理器:

玩家得分设置成一个静态变量:

 public class ScoreManager : MonoBehaviour
{
public static int score; // 玩家得分
Text text; // UI
void Awake ()
{
text = GetComponent <Text> ();
//开始时候重置得分
score = 0;
}
void Update ()
{
// Set the displayed text to be the word "Score" followed by the score value.
text.text = "Score: " + score;
}
}

1.然后来看一下游戏结束管理器:

这个管理器每帧判断玩家当前生命是否为0,为0则游戏结束,播放结算UI淡入的动画

public class GameOverManager : MonoBehaviour
{
public PlayerHealth playerHealth; // 玩家生命
Animator anim; // GameOver状态机
void Awake ()
{
anim = GetComponent <Animator> ();
}
void Update ()
{
if(playerHealth.currentHealth <= 0)
{
// 告诉状态机游戏结束
anim.SetTrigger ("GameOver");
}
}
}

这里现在是:玩家死亡播放结算动画,重新开始游戏是放在玩家的死亡动画的事件中调用的;

原版本做法:玩家死亡播放结算动画,然后开启计时器,计时到restartDelay重启delay时间后重启游戏;这两种方法都是可行的。

这里需要注意的是:结算UI淡入的动画是用Animation录制关键帧的:



录制成Animation后,设置好状态机:需要先新建一个空的状态且设为默认,然后用Trigger带到游戏结束状态:

Animator组件和GameOverManager脚本都放在画布上:

所以玩家死亡后就播放了录制好的结算淡入动画,记得录制好后取消loop。

2.游戏暂停管理器:(Nice的三元运算符)

public class PauseManager : MonoBehaviour {

	Canvas canvas;
void Start()
{
canvas = GetComponent<Canvas>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
canvas.enabled = !canvas.enabled;
Pause();
}
}
public void Pause()
{
Time.timeScale = Time.timeScale == 0 ? 1 : 0; //暂停就取消暂停,没暂停就暂停
}
public void Quit()
{
#if UNITY_EDITOR
EditorApplication.isPlaying = false; //编辑器里的退出
#else
Application.Quit(); //版本的退出
#endif
}

暂停时打开的游戏设置面板:

1/ 滑动条控制音量 (注册改音量事件 到滑动条值改变的事件中)AddListener(UGUI事件);毁灭物体时移除事件。

void Start ()
{
if(GameObject.Find("EffectsSlider"))
GameObject.Find("EffectsSlider").GetComponent<Slider>().onValueChanged.AddListener(SetVolume);
}
void SetVolume(float volume)
{
GetComponent<AudioSource>().volume = volume;
}
void OnDestroy()
{
if(GameObject.Find("EffectsSlider"))
GameObject.Find("EffectsSlider").GetComponent<Slider>().onValueChanged.RemoveListener(SetVolume);
}

2/ 暂停时候背景音效衰弱设置:

使用AudioMixerSnapShot类需要using UnityEngine.Audio

public AudioMixerSnapshot paused; //暂停时的
public AudioMixerSnapshot unpaused; //取消暂停恢复的

暂停函数Pause()中调用这个函数:

	void Lowpass()
{
if (Time.timeScale == 0)
{ //0.01s后切换到暂停的音效设置
paused.TransitionTo(.01f);
}
else { //0.01s后切换回来
unpaused.TransitionTo(.01f);
}
}

关于AudioMixer,后面会具体讲。

SurvivalShooter学习笔记(九.游戏暂停、结束)的更多相关文章

  1. 多线程学习笔记九之ThreadLocal

    目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...

  2. MDX导航结构层次:《Microsoft SQL Server 2008 MDX Step by Step》学习笔记九

    <Microsoft SQL Server 2008 MDX Step by Step>学习笔记九:导航结构层次   SQL Server 2008中SQL应用系列及BI笔记系列--目录索 ...

  3. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...

  4. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

  5. cocos2d-x学习笔记(18)--游戏打包(windows平台)

    cocos2d-x学习笔记(18)--游戏打包(windows平台)           之前做好的游戏,都是在vs2008下编译执行的.假设说想把游戏公布到网上或者和其它人一起分享游戏,那就得对游戏 ...

  6. go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)

    目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ...

  7. 《MFC游戏开发》笔记九 游戏中的碰撞判定初步&怪物运动简单AI

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9374935 作者:七十一雾央 新浪微博:http:// ...

  8. Python学习笔记九

    Python学习笔记之九 为什么要有操作系统 管理硬件,提供接口. 管理调度进程,并且将多个进程对硬件的竞争变得有序. 操作系统发展史 第一代计算机:真空管和穿孔卡片 没有操作系统,所有的程序设计直接 ...

  9. vue学习笔记(九)vue-cli中的组件通信

    前言 在上一篇博客vue学习笔记(八)组件校验&通信中,我们学会了vue中组件的校验和父组件向子组件传递信息以及子组件通知父组件(父子组件通信),上一篇博客也提到那是对组件内容的刚刚开始,而本 ...

随机推荐

  1. LoadRunner中运行场景时提示"You do not have a license for this Vuser type."

    LoadRunner中运行场景时提示"You do not have a license for this Vuser type." 2012-06-15 17:09:07|  分 ...

  2. [Linux]--解决虚拟机中安装ubuntu不能自适应的问题

    这几天换了新的电脑,但是装上ubuntu mate以后就一直不能自适应窗口大小改变分辨率,奈何我是个强迫症,再加上也不想老师带着自己的笔记本跑动跑西的(主要是太重了...),于是今天花了一下午的时间找 ...

  3. EMQTT benchmark测试

    #-c 最大的客户端数据, -i:时间间隔 -t:订阅主题 -q:订阅方式 ./emqtt_bench_sub -c 50000 -i 10 -t bench/%i -q 2 notice: You ...

  4. 初始化列表(const和引用成员)、拷贝构造函数

    一.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 构造函数的执行分为两个阶段 初始化段 普通计算段 (一).对象成员及其初始化  C++ Code  1 2 3 4 5 6 7 8 9 1 ...

  5. windows下LIB和DLL的区别与使用

    共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library. 一种是LIB包含 ...

  6. C# DataTable Operations

    DataTable详解 https://www.cnblogs.com/Sandon/p/5175829.html 怎样删除一行 https://www.cnblogs.com/jhxk/articl ...

  7. GridControl摘录

    gvCabTotalInfo.Columns["出线平均<br>电压"].SummaryItem.SummaryType = DevExpress.Data.Summa ...

  8. GraphicsMagick 学习笔记

    两种最常用的图片处理工具:GraphicsMagick 或 ImageMagick,GM是IM的分支,这两个图片处理工具功能基本相同,各有特色.但他们并不是nodejs的插件,它们都是客户端软件,li ...

  9. atitit。mssql sql server 转换mysql 及 分页sql ast的搭建

    atitit.mssql sql server 转换mysql  及 分页sql ast的搭建 1. 主要的的转换::函数的转换,分页的转换 1 2. 思路::mssql sql >>as ...

  10. IBM websphere MQ 消息发送与获取

    一. 所需依赖包,安装 IBM websphere MQ 后,在安装目录下的 java 目录内 import java.io.IOException; import java.util.Propert ...