中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

天津市建設(shè)工程評(píng)標(biāo)專家網(wǎng)站谷歌google官網(wǎng)下載

天津市建設(shè)工程評(píng)標(biāo)專家網(wǎng)站,谷歌google官網(wǎng)下載,業(yè)之峰裝飾口碑怎么樣,世界工廠采購網(wǎng)登錄文章目錄 一、 介紹和知識(shí)點(diǎn)九、UnityFacade 門面設(shè)計(jì)模式二、 聲音全局管理器測試音頻代碼UI全局管理器父類抽象類 BaseManager子類 UIManager 四、 UI按鈕的引用父類 BasePanel子類主面板 MainPanel子類 游戲中 GamePanel子類 游戲結(jié)果 ResultPanel 角色動(dòng)畫器、控制角色移動(dòng)…

文章目錄

  • 一、 介紹和知識(shí)點(diǎn)
  • 九、UnityFacade 門面設(shè)計(jì)模式
  • 二、 聲音全局管理器
  • 測試音頻代碼
  • UI全局管理器
    • 父類抽象類 BaseManager
    • 子類 UIManager
  • 四、 UI按鈕的引用
    • 父類 BasePanel
    • 子類主面板 MainPanel
    • 子類 游戲中 GamePanel
    • 子類 游戲結(jié)果 ResultPanel
  • 角色動(dòng)畫器、控制角色移動(dòng)
  • 游戲獎(jiǎng)懲道具
    • 在這里插入圖片描述


一、 介紹和知識(shí)點(diǎn)

玩家通過跳躍踩磚塊,達(dá)到相應(yīng)的百分比,即可過關(guān)。
有3個(gè)關(guān)卡
可以暫停
在這里插入圖片描述
在這里插入圖片描述

堆棧
數(shù)據(jù)字典
枚舉
UnityFacade 門面設(shè)計(jì)模式
從資源文件中獲取音頻文件


九、UnityFacade 門面設(shè)計(jì)模式

這是一個(gè)UnityFacade類的代碼,它是一個(gè)單例類,用于管理游戲中的各種Manager,包括AudioManager、UIManagerGameManagerSaveManager。下面是代碼的逐行注釋:```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class UnityFacade : MonoBehaviour
{private AudioManager _audioManager; //聲明一個(gè)私有的AudioManager對(duì)象private UIManager _uiManager; //聲明一個(gè)私有的UIManager對(duì)象private GameManager _gameManager; //聲明一個(gè)私有的GameManager對(duì)象private SaveManager _saveManager; //聲明一個(gè)私有的SaveManager對(duì)象private float _timer; //聲明一個(gè)私有的計(jì)時(shí)器變量//聲明一個(gè)公有的計(jì)時(shí)器屬性public float Timer{get { return _timer; }set { _timer = value; }}//聲明一個(gè)公有的GameManager屬性public GameManager GameManager{get { return _gameManager; }}//聲明一個(gè)公有的UIManager屬性public UIManager UiManager{get { return _uiManager; }}//聲明一個(gè)公有的AudioManager屬性public AudioManager AudioManager{get { return _audioManager; }}//聲明一個(gè)公有的SaveManager屬性public SaveManager SaveManager{get { return _saveManager; }}//聲明一個(gè)私有的靜態(tài)UnityFacade對(duì)象private static UnityFacade _instance;//聲明一個(gè)公有的靜態(tài)UnityFacade對(duì)象,用于獲取UnityFacade的單例public static UnityFacade Instance{get { return _instance; }}//在Awake中初始化單例private void Awake(){if (_instance == null){_instance = this;}}void Start(){//實(shí)例化所有Manager_audioManager = new AudioManager();_uiManager = new UIManager();_gameManager = new GameManager();_saveManager = new SaveManager();//調(diào)用所有的Manager的OnInit方法_audioManager.OnInit();_uiManager.OnInit();_saveManager.OnInit();_gameManager.OnInit();}// Update is called once per framevoid Update(){//調(diào)用所有Manager的OnUpdate方法_audioManager.OnUpdate();_uiManager.OnUpdate();_gameManager.OnUpdate();_saveManager.OnUpdate();}//在銷毀對(duì)象時(shí)調(diào)用所有Manager的OnDestroy方法private void OnDestroy(){_audioManager.OnDestroy();_uiManager.OnDestroy();_gameManager.OnDestroy();_saveManager.OnDestroy();}//啟動(dòng)計(jì)時(shí)器倒計(jì)時(shí)public void StartTimerCountDown(){StartCoroutine(_gameManager.TimerCountIEnumerator());}//生成獎(jiǎng)勵(lì)物品public void SpawnAward(){_gameManager.SpawnAward();}//生成懲罰物品public void SpawnPunishment(){_gameManager.SpawnPunishment();}
}

UnityFacade類是一個(gè)單例類,用于管理游戲中的各種Manager,包括AudioManager、UIManager、GameManager和SaveManager。在Start函數(shù)中,實(shí)例化所有Manager并調(diào)用其OnInit方法,然后在Update函數(shù)中調(diào)用所有Manager的OnUpdate方法,確保所有Manager都在運(yùn)行。在OnDestroy函數(shù)中,調(diào)用所有Manager的OnDestroy方法,確保在銷毀對(duì)象時(shí)所有Manager都被正確銷毀。此外,UnityFacade類還提供了一些公有方法,如StartTimerCountDown、SpawnAward和SpawnPunishment,用于管理游戲中的一些功能。


二、 聲音全局管理器

這段代碼的作用是實(shí)現(xiàn)游戲中的音頻管理,具體包括以下功能:

  1. 創(chuàng)建音頻管理器:在OnInit方法中,創(chuàng)建一個(gè)名為"AudiManager"的GameObject,并將其作為音頻管理器的根節(jié)點(diǎn)。同時(shí),創(chuàng)建名為"BGM"和"Sound"的子節(jié)點(diǎn),并將背景音樂和音效的AudioSource組件分別添加到這兩個(gè)子節(jié)點(diǎn)上。

  2. 加載音頻資源:在LoadAudioResources方法中,使用Resources.Load方法加載所有的背景音樂和音效資源,并將它們存儲(chǔ)在對(duì)應(yīng)的字典中。其中,BGMType和SoundType是兩個(gè)枚舉類型,用于區(qū)分不同的背景音樂和音效。

  3. 播放背景音樂:通過PlayBGM方法,可以播放指定類型的背景音樂。在此方法中,通過字典查找找到對(duì)應(yīng)的音頻資源,并將其設(shè)置為_bgmAudioSource的clip屬性,最后調(diào)用Play方法開始播放背景音樂。

  4. 停止背景音樂:通過StopBGM方法,可以停止當(dāng)前正在播放的背景音樂。

  5. 播放音效:通過PlaySound方法,可以播放指定類型的音效。在此方法中,通過字典查找找到對(duì)應(yīng)的音頻資源,并調(diào)用PlayOneShot方法播放音效。

  6. 單例模式:通過將AudioManager繼承自BaseManager,并利用BaseManager的單例模式,確保全局只有一個(gè)音頻管理器實(shí)例。

  7. 枚舉類型:通過BGMType和SoundType枚舉類型,區(qū)分不同的背景音樂和音效。

  8. 繼承和虛方法:將AudioManager繼承自BaseManager,并重寫OnInit方法,實(shí)現(xiàn)了音頻管理器的抽象和多態(tài)。

  9. Resources功能:使用Unity中的Resources.Load方法加載音頻資源,實(shí)現(xiàn)了游戲中的音頻動(dòng)態(tài)加載和卸載。

  10. 委托和事件:通過定義PlayBGMEvent和StopBGMEvent委托類型和相應(yīng)的事件,使得其他游戲?qū)ο罂梢杂嗛喓晚憫?yīng)這些事件,實(shí)現(xiàn)了游戲中音頻播放和停止的協(xié)作功能。

```C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AudioManager : BaseManager
{//定義兩個(gè)音源組件private AudioSource _bgmAudioSource;private AudioSource _soundAudioSource;//定義背景音樂和音效的字典private Dictionary<BGMType, AudioClip> _bgmDict;private Dictionary<SoundType, AudioClip> _soundDict;//初始化方法public override void OnInit(){//創(chuàng)建音頻管理器、背景音樂、音效三個(gè)游戲?qū)ο?#xff0c;并設(shè)置它們的父節(jié)點(diǎn)GameObject audioManagerGo = new GameObject("AudioManager");GameObject bgm = new GameObject("BGM");GameObject sound = new GameObject("Sound");bgm.transform.SetParent(audioManagerGo.transform);sound.transform.SetParent(audioManagerGo.transform);//給背景音樂和音效游戲?qū)ο筇砑右粼唇M件_bgmAudioSource = bgm.AddComponent<AudioSource>();_soundAudioSource = sound.AddComponent<AudioSource>();//設(shè)置音源組件的初始值,背景音樂循環(huán)播放,音效不循環(huán),都不立即播放_bgmAudioSource.loop = true;_bgmAudioSource.playOnAwake = true;_soundAudioSource.loop = false;_soundAudioSource.playOnAwake = false;//設(shè)置背景音樂的默認(rèn)音量_bgmAudioSource.volume = 0.1f;//加載聲音資源LoadAudioResources();}//加載聲音資源private void LoadAudioResources(){//背景音樂資源的加載AudioClip aboutUsClip = Resources.Load<AudioClip>("BGM/AboutUs");AudioClip gameBgm1Clip = Resources.Load<AudioClip>("BGM/GameBgm1");AudioClip gameBgm2Clip = Resources.Load<AudioClip>("BGM/GameBgm2");AudioClip gameBgm3Clip = Resources.Load<AudioClip>("BGM/GameBgm3");AudioClip gameBgm4Clip = Resources.Load<AudioClip>("BGM/GameBgm4");AudioClip gameBgm5Clip = Resources.Load<AudioClip>("BGM/GameBgm5");AudioClip mainPanelClip = Resources.Load<AudioClip>("BGM/MainPanel");//將背景音樂資源添加到字典中_bgmDict = new Dictionary<BGMType, AudioClip>();_bgmDict.Add(BGMType.AboutUS, aboutUsClip);_bgmDict.Add(BGMType.BGM_1, gameBgm1Clip);_bgmDict.Add(BGMType.BGM_2, gameBgm2Clip);_bgmDict.Add(BGMType.BGM_3, gameBgm3Clip);_bgmDict.Add(BGMType.BGM_4, gameBgm4Clip);_bgmDict.Add(BGMType.BGM_5, gameBgm5Clip);_bgmDict.Add(BGMType.Main_Panel, mainPanelClip);//音效音樂資源的加載AudioClip awardClip = Resources.Load<AudioClip>("Sounds/Award");AudioClip brickClip = Resources.Load<AudioClip>("Sounds/Brick");AudioClip brick1Clip = Resources.Load<AudioClip>("Sounds/Brick1");AudioClip brickDestroyClip = Resources.Load<AudioClip>("Sounds/Brick_Destroy");AudioClip buttonClip = Resources.Load<AudioClip>("Sounds/Button");AudioClip failedClip = Resources.Load<AudioClip>("Sounds/Failed");AudioClip fallDownClip = Resources.Load<AudioClip>("Sounds/Fall_Down");AudioClip jumpClip = Resources.Load<AudioClip>("Sounds/Jump");AudioClip punishmentClip = Resources.Load<AudioClip>("Sounds/Punishment");AudioClip winClip = Resources.Load<AudioClip>("Sounds/Win");AudioClip winPerfectClip = Resources.Load<AudioClip>("Sounds/WinPerfect");//將音效資源添加到字典中_soundDict = new Dictionary<SoundType, AudioClip>();_soundDict.Add(SoundType.Award, awardClip);_soundDict.Add(SoundType.Brick, brickClip);_soundDict.Add(SoundType.Brick_1, brick1Clip);_soundDict.Add(SoundType.Brick_Destroy, brickDestroyClip);_soundDict.Add(SoundType.Button, buttonClip);_soundDict.Add(SoundType.Failed, failedClip);_soundDict.Add(SoundType.Fall_Down, fallDownClip);_soundDict.Add(SoundType.Jump, jumpClip);_soundDict.Add(SoundType.Punishment, punishmentClip);_soundDict.Add(SoundType.Win, winClip);_soundDict.Add(SoundType.WinPerfect, winPerfectClip);}//播放背景音樂public void PlayBGM(BGMType bgmType){//停止當(dāng)前背景音樂的播放_bgmAudioSource.Stop();//設(shè)置新的背景音樂,并播放_bgmAudioSource.clip = _bgmDict[bgmType];_bgmAudioSource.Play();}//播放音效public void PlaySound(SoundType soundType){//停止當(dāng)前音效的播放_soundAudioSource.Stop();//設(shè)置新的音效,并播放_soundAudioSource.clip = _soundDict[soundType];_soundAudioSource.Play();}//關(guān)閉BGM播放public void StopBGM(){_bgmAudioSource.Stop();}//音量控制public void ControlVolume(float bgmVolume, float soundVolume){_bgmAudioSource.volume = bgmVolume;_soundAudioSource.volume = soundVolume;}//以下三個(gè)方法都是空實(shí)現(xiàn),不做任何操作public override void OnUpdate(){}public override void OnDestroy(){}
}//定義背景音樂類型枚舉
public enum BGMType
{AboutUS,BGM_1,BGM_2,BGM_3,BGM_4,BGM_5,Main_Panel
}//定義音效類型枚舉
public enum SoundType
{Award, Brick, Brick_1, Brick_Destroy, Button, Failed, Fall_Down, Jump, Punishment, Win, WinPerfect
}

測試音頻代碼

下面這兩段代碼,用于測試音頻組件,可以復(fù)用

在這里插入圖片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class aaa : MonoBehaviour
{private AudioManager _audioManager;public AudioManager AudioManager{get { return _audioManager; }}private static aaa _instance;public static aaa Instance{get { return _instance; }}private void Awake(){if (_instance == null){_instance = this;}}// Use this for initializationvoid Start(){//實(shí)例化所有Manager_audioManager = new AudioManager();// 調(diào)用所有的Manager的OnInit方法_audioManager.OnInit();}// Update is called once per framevoid Update(){_audioManager.OnUpdate();}private void OnDestroy(){_audioManager.OnDestroy();}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class TestAudioPanel : MonoBehaviour
{public Button playSoundBtn;public Button playBGMBtn;public Slider volumeSlider;// Use this for initializationvoid Start () {playSoundBtn.onClick.AddListener(delegate { PlaySoundButtonClicked(); });playBGMBtn.onClick.AddListener(delegate { PlayBGMButtonClicked(); });volumeSlider.onValueChanged.AddListener(delegate(float arg0) { SliderValueChanged(arg0); });}// Update is called once per framevoid Update () {}private void PlaySoundButtonClicked(){aaa.Instance.AudioManager.PlaySound(SoundType.Button);}private void PlayBGMButtonClicked(){aaa.Instance.AudioManager.PlayBGM(BGMType.Main_Panel);}private void SliderValueChanged(float value){aaa.Instance.AudioManager.ControlVolume(value,value);}}

UI全局管理器

父類抽象類 BaseManager

該抽象類定義了一個(gè)基本的管理器,其具體實(shí)現(xiàn)可以繼承該類并實(shí)現(xiàn)三個(gè)抽象方法,以滿足具體的需求。其中,OnInit() 方法用于初始化管理器、OnUpdate() 方法用于在每幀更新管理器、OnDestroy() 方法用于銷毀管理器。這樣,我們就可以通過繼承該類來編寫各種各樣的管理器,從而更好地管理游戲中的各種資源、對(duì)象和邏輯。

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; public abstract class BaseManager  // 定義抽象類 BaseManager
{public abstract void OnInit();  // 聲明抽象方法 OnInit()public abstract void OnUpdate();  // 聲明抽象方法 OnUpdate()public abstract void OnDestroy();  // 聲明抽象方法 OnDestroy()}

子類 UIManager

這段代碼主要實(shí)現(xiàn)了一個(gè)UI管理器,其中包括了以下功能:

  1. 加載面板:根據(jù)傳入的面板類型,從預(yù)設(shè)體字典中獲取對(duì)應(yīng)的預(yù)設(shè)體并實(shí)例化,然后執(zhí)行該面板的OnEnter方法,同時(shí)將該面板入棧。
  2. 關(guān)閉(彈出)頂層面板:從棧中彈出頂層面板,并執(zhí)行該面板的OnExit方法,同時(shí)恢復(fù)下一個(gè)面板的OnResume方法。
  3. 初始化:獲取Canvas的Transform屬性,初始化預(yù)設(shè)體字典和已實(shí)例化面板字典,并加載第一個(gè)面板。
  4. 枚舉類型:定義了PanelType枚舉類型,包括了所有的面板類型。

補(bǔ)充說明:

  1. BaseManager是一個(gè)抽象類,該UIManager類繼承自BaseManager,并且需要實(shí)現(xiàn)其中的三個(gè)虛函數(shù):OnInit、OnUpdate和OnDestroy。
  2. 該UIManager類中還定義了一個(gè)InstantiatedPanelDict屬性,用于獲取已實(shí)例化面板字典。
```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class UIManager : BaseManager
{private Transform _canvasTransform; //Canvas的Transform組件private Dictionary<PanelType, GameObject> _uiPanelPrefabDict; //UI面板預(yù)制體字典private Dictionary<PanelType, BasePanel> _instantiatedPanelDict; //實(shí)例化的UI面板字典private Stack<BasePanel> _panelStack; //UI面板棧public Dictionary<PanelType, BasePanel> InstantiatedPanelDict{get { return _instantiatedPanelDict; }}/// <summary>/// 加載面板/// </summary>/// <param name="panelType"></param>/// <returns></returns>public BasePanel PushPanel(PanelType panelType){//從實(shí)例化的面板字典中獲取該面板BasePanel panel = null;_instantiatedPanelDict.TryGetValue(panelType, out panel);if (panel == null){//說明該面板從未實(shí)例化過(從未入棧),此處需要實(shí)例化GameObject panelPrefab = _uiPanelPrefabDict[panelType];GameObject panelGO = GameObject.Instantiate(panelPrefab, _canvasTransform, false);panel = panelGO.GetComponent<BasePanel>();_instantiatedPanelDict.Add(panelType, panel); //將該面板加入實(shí)例化的面板字典中}else{//說明該面板已經(jīng)實(shí)例化,入棧后被出棧,處于被禁用狀態(tài),需要重新啟用panel.gameObject.SetActive(true);}//執(zhí)行該P(yáng)anel的OnEnterpanel.OnEnter();if (_panelStack.Count > 0){BasePanel peekPanel = _panelStack.Peek();peekPanel.OnPause();}_panelStack.Push(panel); //將該面板入棧return panel;}/// <summary>/// 關(guān)閉(彈出)頂層面板/// </summary>public void PopPanel(){if (_panelStack.Count > 0){BasePanel peekPanel = _panelStack.Pop();peekPanel.OnExit();if (_panelStack.Count > 0){BasePanel secPeekPanel = _panelStack.Peek();secPeekPanel.OnResume();}}}public override void OnInit(){//獲取掛載Canvas的Transform屬性_canvasTransform = GameObject.Find("Canvas").transform;//初始化面板預(yù)制體字典_uiPanelPrefabDict = new Dictionary<PanelType, GameObject>();_uiPanelPrefabDict.Add(PanelType.Main, Resources.Load<GameObject>("UIPanel/Panel_Main"));_uiPanelPrefabDict.Add(PanelType.Game, Resources.Load<GameObject>("UIPanel/Panel_Game"));_uiPanelPrefabDict.Add(PanelType.Result, Resources.Load<GameObject>("UIPanel/Panel_Result"));_uiPanelPrefabDict.Add(PanelType.Battle, Resources.Load<GameObject>("UIPanel/Panel_Battle"));_uiPanelPrefabDict.Add(PanelType.Fail, Resources.Load<GameObject>("UIPanel/Panel_Fail"));_uiPanelPrefabDict.Add(PanelType.Success, Resources.Load<GameObject>("UIPanel/Panel_Success"));_uiPanelPrefabDict.Add(PanelType.Pause, Resources.Load<GameObject>("UIPanel/Panel_Pause"));_uiPanelPrefabDict.Add(PanelType.Level, Resources.Load<GameObject>("UIPanel/Panel_Level"));_uiPanelPrefabDict.Add(PanelType.Index, Resources.Load<GameObject>("UIPanel/Panel_Index"));//初始化_instantiatedPanelDict = new Dictionary<PanelType, BasePanel>();_panelStack = new Stack<BasePanel>();//加載第一個(gè)Panel// PushPanel(PanelType.Main);}public override void OnUpdate(){}public override void OnDestroy(){}
}public enum PanelType
{Main,Game,Result,Battle,Fail,Success,Pause,Level,Index
}

這段代碼實(shí)現(xiàn)了一個(gè)UI管理器,用于管理游戲中的UI面板。其中,PushPanel()函數(shù)用于加載面板,PopPanel()函數(shù)用于關(guān)閉頂層面板,OnInit()函數(shù)用于在UI管理器被初始化時(shí)加載第一個(gè)面板。

UI管理器中使用了一個(gè)面板棧_panelStack,用于存儲(chǔ)當(dāng)前打開的所有UI面板,實(shí)現(xiàn)了UI面板的層級(jí)管理。同時(shí),還使用了兩個(gè)面板字典_uiPanelPrefabDict_instantiatedPanelDict,用于存儲(chǔ)預(yù)制體和實(shí)例化的面板。

代碼中使用了單例模式實(shí)現(xiàn)了UI管理器的唯一性。同時(shí),還繼承了BaseManager類,實(shí)現(xiàn)了對(duì)游戲管理器的統(tǒng)一管理。


四、 UI按鈕的引用

父類 BasePanel

這四個(gè)方法是狀態(tài)機(jī)中狀態(tài)的生命周期方法,用于管理狀態(tài)的進(jìn)入、暫停、恢復(fù)和退出。

具體來說,當(dāng)一個(gè)狀態(tài)被切換到時(shí),首先會(huì)調(diào)用OnEnter()方法,用于初始化狀態(tài)的數(shù)據(jù)和變量。當(dāng)狀態(tài)被暫停時(shí)(例如切換到其他狀態(tài)),會(huì)調(diào)用OnPause()方法,用于暫停狀態(tài)的邏輯和動(dòng)畫。當(dāng)狀態(tài)恢復(fù)時(shí)(例如從其他狀態(tài)切換回該狀態(tài)),會(huì)調(diào)用OnResume()方法,用于恢復(fù)狀態(tài)的邏輯和動(dòng)畫。當(dāng)狀態(tài)被退出時(shí),會(huì)調(diào)用OnExit()方法,用于清理狀態(tài)的數(shù)據(jù)和變量。

using System.Collections;                      
using System.Collections.Generic;              
using UnityEngine;                              public abstract class BasePanel : MonoBehaviour  // 定義一個(gè)抽象類 BasePanel,繼承自 MonoBehaviour 類
{public abstract void OnEnter();              // 聲明一個(gè)抽象方法 OnEnter,由子類實(shí)現(xiàn)public abstract void OnPause();              // 聲明一個(gè)抽象方法 OnPause,由子類實(shí)現(xiàn)public abstract void OnResume();             // 聲明一個(gè)抽象方法 OnResume,由子類實(shí)現(xiàn)public abstract void OnExit();               // 聲明一個(gè)抽象方法 OnExit,由子類實(shí)現(xiàn)}

子類主面板 MainPanel

  1. 定義MainPanel類,繼承自BasePanel。
  2. 定義開始按鈕和關(guān)閉按鈕兩個(gè)公共屬性。
  3. 在Start()方法中添加開始按鈕和關(guān)閉按鈕的點(diǎn)擊事件監(jiān)聽器。
  4. 在StartButtonClicked()方法中調(diào)用UnityFacade.Instance.UiManager.PushPanel()方法,實(shí)現(xiàn)面板的切換到GamePanel。
  5. 在CloseButtonClicked()方法中調(diào)用UnityFacade.Instance.UiManager.PopPanel()方法,實(shí)現(xiàn)當(dāng)前面板的彈出。
  6. 在OnEnter()方法中實(shí)現(xiàn)面板進(jìn)入時(shí)的操作。
  7. 在OnPause()方法中禁用開始按鈕和關(guān)閉按鈕,實(shí)現(xiàn)面板暫停時(shí)的操作。
  8. 在OnResume()方法中啟用開始按鈕和關(guān)閉按鈕,實(shí)現(xiàn)面板恢復(fù)時(shí)的操作。
  9. 在OnExit()方法中隱藏當(dāng)前面板,實(shí)現(xiàn)面板退出時(shí)的操作。
```using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class MainPanel : BasePanel //繼承自BasePanel
{public Button startBtn; //開始按鈕public Button closeBtn; //關(guān)閉按鈕private void Start(){//添加開始按鈕點(diǎn)擊事件監(jiān)聽器startBtn.onClick.AddListener(delegate { StartButtonClicked(); });//添加關(guān)閉按鈕點(diǎn)擊事件監(jiān)聽器closeBtn.onClick.AddListener(delegate { CloseButtonClicked(); });}private void StartButtonClicked(){//點(diǎn)擊開始按鈕,推入GamePanelUnityFacade.Instance.UiManager.PushPanel(PanelType.Game);}private void CloseButtonClicked(){//點(diǎn)擊關(guān)閉按鈕,彈出當(dāng)前面板UnityFacade.Instance.UiManager.PopPanel();}public override void OnEnter(){//面板進(jìn)入時(shí)調(diào)用此方法Debug.Log("MainPanel加載了");}public override void OnPause(){//面板暫停時(shí)調(diào)用此方法,禁用開始按鈕和關(guān)閉按鈕startBtn.interactable = false;closeBtn.interactable = false;}public override void OnResume(){//面板恢復(fù)時(shí)調(diào)用此方法,啟用開始按鈕和關(guān)閉按鈕startBtn.interactable = true;closeBtn.interactable = true;}public override void OnExit(){//面板退出時(shí)調(diào)用此方法,隱藏當(dāng)前面板this.gameObject.SetActive(false);}
}```

子類 游戲中 GamePanel

這段代碼實(shí)現(xiàn)了一個(gè)游戲面板(GamePanel),繼承自一個(gè)基礎(chǔ)面板(BasePanel),并實(shí)現(xiàn)了在面板中的按鈕點(diǎn)擊事件。具體來說,這個(gè)面板有兩個(gè)按鈕:resultBtn和closeBtn,點(diǎn)擊resultBtn會(huì)跳轉(zhuǎn)到一個(gè)結(jié)果面板(PanelType.Result),而點(diǎn)擊closeBtn會(huì)關(guān)閉當(dāng)前面板。

在 Start() 方法中,通過監(jiān)聽按鈕的點(diǎn)擊事件來實(shí)現(xiàn)按鈕的功能,即 resultBtn 點(diǎn)擊時(shí)調(diào)用 ResultButtonClicked() 方法,closeBtn 點(diǎn)擊時(shí)調(diào)用 CloseButtonClicked() 方法。ResultButtonClicked() 方法中調(diào)用了 UnityFacade.UiManager.PushPanel() 方法,用于跳轉(zhuǎn)到結(jié)果面板,而 CloseButtonClicked() 方法中調(diào)用了 UnityFacade.UiManager.PopPanel() 方法,用于關(guān)閉當(dāng)前面板。

在 OnEnter() 方法中,當(dāng)這個(gè)游戲面板被打開時(shí),會(huì)輸出一個(gè) Debug.Log() 信息,提示面板被打開了。

在 OnPause() 方法中,當(dāng)這個(gè)游戲面板被暫停時(shí),會(huì)將 resultBtn 和 closeBtn 的 interactable 屬性設(shè)置為 false,即這兩個(gè)按鈕將不再響應(yīng)點(diǎn)擊事件。

在 OnResume() 方法中,當(dāng)這個(gè)游戲面板從暫停狀態(tài)中恢復(fù)時(shí),會(huì)將 resultBtn 和 closeBtn 的 interactable 屬性設(shè)置為 true,即這兩個(gè)按鈕將重新響應(yīng)點(diǎn)擊事件。

在 OnExit() 方法中,當(dāng)這個(gè)游戲面板被關(guān)閉時(shí),會(huì)將這個(gè)游戲面板的 gameObject 設(shè)置為不可見,即關(guān)閉這個(gè)游戲面板。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;// 繼承自 BasePanel
public class GamePanel : BasePanel
{// 定義兩個(gè)按鈕public Button resultBtn;public Button closeBtn;// 在 Start 函數(shù)中添加按鈕點(diǎn)擊事件監(jiān)聽private void Start(){resultBtn.onClick.AddListener(delegate { ResultButtonClicked(); });closeBtn.onClick.AddListener(delegate { CloseButtonClicked(); });}// 點(diǎn)擊結(jié)果按鈕的處理函數(shù)private void ResultButtonClicked(){// 調(diào)用 UnityFacade 的 UiManager 的 PushPanel 函數(shù),打開結(jié)果面板UnityFacade.Instance.UiManager.PushPanel(PanelType.Result);}// 點(diǎn)擊關(guān)閉按鈕的處理函數(shù)private void CloseButtonClicked(){// 調(diào)用 UnityFacade 的 UiManager 的 PopPanel 函數(shù),關(guān)閉當(dāng)前面板UnityFacade.Instance.UiManager.PopPanel();}// 進(jìn)入面板時(shí)的處理函數(shù)public override void OnEnter(){Debug.Log("GamePanel打開了");}// 暫停面板時(shí)的處理函數(shù)public override void OnPause(){// 將兩個(gè)按鈕設(shè)置為不可用resultBtn.interactable = false;closeBtn.interactable = false;}// 恢復(fù)面板時(shí)的處理函數(shù)public override void OnResume(){// 將兩個(gè)按鈕設(shè)置為可用resultBtn.interactable = true;closeBtn.interactable = true;}// 退出面板時(shí)的處理函數(shù)public override void OnExit(){// 將自身的 gameObject 設(shè)置為不可見this.gameObject.SetActive(false);}
}

子類 游戲結(jié)果 ResultPanel

它實(shí)現(xiàn)了一個(gè)游戲面板,名為ResultPanel。這個(gè)面板里有一個(gè)按鈕,名為closeBtn,點(diǎn)擊它可以關(guān)閉當(dāng)前面板。這個(gè)面板繼承自BasePanel類,因此實(shí)現(xiàn)了BasePanel類中定義的四個(gè)方法:OnEnter、OnPause、OnResume、OnExit。其中,OnEnter方法是在面板打開時(shí)被調(diào)用的,OnPause方法是在面板被暫停時(shí)被調(diào)用的,OnResume方法是在面板恢復(fù)時(shí)被調(diào)用的,OnExit方法是在面板關(guān)閉時(shí)被調(diào)用的。在這里,OnEnter方法只是打印了一條調(diào)試信息。Start方法用于初始化面板,它給closeBtn按鈕添加了一個(gè)事件監(jiān)聽器,當(dāng)按鈕被點(diǎn)擊時(shí),會(huì)執(zhí)行CloseButtonClicked方法。CloseButtonClicked方法中,通過UnityFacade.Instance.UiManager.PopPanel()方法關(guān)閉當(dāng)前面板。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class ResultPanel : BasePanel
{public Button closeBtn;public override void OnEnter(){Debug.Log("ResultPanel打開了");}public override void OnPause(){}public override void OnResume(){}public override void OnExit(){this.gameObject.SetActive(false);}// Use this for initializationvoid Start () {closeBtn.onClick.AddListener(delegate { CloseButtonClicked(); });}private void CloseButtonClicked(){UnityFacade.Instance.UiManager.PopPanel();}// Update is called once per framevoid Update () {}
}

角色動(dòng)畫器、控制角色移動(dòng)

角色可以跳躍、行走
在這里插入圖片描述

在這里插入圖片描述


游戲獎(jiǎng)懲道具

掉血的磚塊:用數(shù)組存儲(chǔ)四張圖片,踩一下hp-1。

public void Injured(){_hp--;if (_hp > 0){if (_hp == 3){UnityFacade.Instance.GameManager.AddTouchCount();}UnityFacade.Instance.AudioManager.PlaySound(SoundType.Brick);_spriteRenderer.sprite = sprites[4 - _hp];}else{UnityFacade.Instance.AudioManager.PlaySound(SoundType.Brick_Destroy);Destroy(this.gameObject);}}

在這里插入圖片描述


保護(hù)罩:玩家得到后,不受任何傷害

  protectorGO.SetActive(true);

在這里插入圖片描述

紅色感嘆號(hào)炸彈:計(jì)時(shí)器減少10秒鐘


綠色感嘆號(hào):計(jì)時(shí)器時(shí)間增加10秒鐘


死亡小球:玩家碰到后
直接游戲結(jié)束

在這里插入圖片描述

private void Move(){if (Math.Abs(_rigidbody2D.velocity.x) < 0.05f&&_isOnGround){if (_direction == MoveDirection.Left){	_rigidbody2D.velocity=new Vector2((int)MoveDirection.Right*vSpeed,0);_direction = MoveDirection.Right;}else if (_direction == MoveDirection.Right){_rigidbody2D.velocity=new Vector2((int)MoveDirection.Left*vSpeed,0);_direction = MoveDirection.Left;}}}

過關(guān)星星動(dòng)畫:
在這里插入圖片描述


http://www.risenshineclean.com/news/33288.html

相關(guān)文章:

  • 為什么登錄不上建設(shè)銀行網(wǎng)站上海網(wǎng)站建設(shè)推廣服務(wù)
  • 蒼南龍港做網(wǎng)站店鋪亞馬遜免費(fèi)的關(guān)鍵詞工具
  • 網(wǎng)站建設(shè)與網(wǎng)頁制作技術(shù)拉新項(xiàng)目官方一手平臺(tái)
  • 龍灣做網(wǎng)站歌爾股份砍單
  • 合肥做公司網(wǎng)站公司太原網(wǎng)站推廣排名
  • 美國室內(nèi)設(shè)計(jì)聯(lián)盟優(yōu)化步驟
  • 捕魚游戲網(wǎng)站制作模板虞城seo代理地址
  • 不用下載就能玩的網(wǎng)頁游戲重慶百度快照優(yōu)化排名
  • 余姚做網(wǎng)站設(shè)計(jì)的免費(fèi)網(wǎng)站建設(shè)哪個(gè)好
  • 深圳正規(guī)網(wǎng)站建設(shè)服務(wù)人工智能培訓(xùn)機(jī)構(gòu)哪個(gè)好
  • 網(wǎng)站制作怎樣做百度app
  • 建網(wǎng)站如何賺錢西安seo外包服務(wù)
  • wordpress html編輯seo建站是什么
  • 海報(bào)設(shè)計(jì)思路上海網(wǎng)優(yōu)化seo公司
  • react網(wǎng)站開發(fā)介紹東莞seo項(xiàng)目優(yōu)化方法
  • 北京網(wǎng)站建設(shè)哪里好經(jīng)典軟文廣告
  • 做星座網(wǎng)站網(wǎng)站測試的內(nèi)容有哪些
  • 通過網(wǎng)站做國際貿(mào)易的成本軟文廣告文案案例
  • 客戶推廣公司北京搜索引擎優(yōu)化管理專員
  • 怎么給網(wǎng)站做php后臺(tái)百度文庫賬號(hào)登錄入口
  • 如何把網(wǎng)站放到空間別人可以訪問今日新聞播報(bào)
  • 網(wǎng)站代理合作百度推廣怎么做
  • 網(wǎng)站做好了 怎么做解析建網(wǎng)站的軟件有哪些
  • 營銷型網(wǎng)站建設(shè)模板今日新聞?lì)^條大事
  • 廣州市城鄉(xiāng)住房建設(shè)廳網(wǎng)站惠州百度seo找誰
  • 怎么設(shè)計(jì)一個(gè)自己的網(wǎng)站全網(wǎng)推廣平臺(tái)推薦
  • 電子商務(wù)網(wǎng)站開發(fā)平臺(tái)圖目前較好的crm系統(tǒng)
  • 網(wǎng)站開發(fā)有哪些職位中國十大流量網(wǎng)站
  • 哪些企業(yè)合適做網(wǎng)站核心關(guān)鍵詞舉例
  • 網(wǎng)站外鏈建設(shè)可以提升網(wǎng)站權(quán)重嗎網(wǎng)絡(luò)市場營銷策劃書