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


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

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

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




  • 相关阅读:
    Kubernetes 内存资源限制实战
    kubernetes 资源管理概述
    终于对探针下手了
    容器和容器云
    理解 Kubernetes volume 和 共享存储
    理解 docker volume
    docker 镜像管理之 overlay2 最佳实践
    docker 资源限制之 cgroup
    Debug Assertion Failed!
    Qt 字符串转md5
  • 原文地址:https://www.cnblogs.com/caymanlu/p/6361683.html
Copyright © 2020-2023  润新知