SurvivalShooter学习笔记(九.游戏暂停、结束)

来源:互联网 发布:淘宝店铺推广怎么推啊 编辑:程序博客网 时间:2024/05/29 15:21

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

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

 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,后面会具体讲。




0 0
原创粉丝点击