fw怎么做网站,有趣的网站有哪些推荐,网站建设 工作计划,备案网站多少钱文章目录 一、 介绍和知识点九、UnityFacade 门面设计模式二、 声音全局管理器测试音频代码UI全局管理器父类抽象类 BaseManager子类 UIManager 四、 UI按钮的引用父类 BasePanel子类主面板 MainPanel子类 游戏中 GamePanel子类 游戏结果 ResultPanel 角色动画器、控制角色移动… 文章目录 一、 介绍和知识点九、UnityFacade 门面设计模式二、 声音全局管理器测试音频代码UI全局管理器父类抽象类 BaseManager子类 UIManager 四、 UI按钮的引用父类 BasePanel子类主面板 MainPanel子类 游戏中 GamePanel子类 游戏结果 ResultPanel 角色动画器、控制角色移动游戏奖惩道具在这里插入图片描述 一、 介绍和知识点
玩家通过跳跃踩砖块达到相应的百分比即可过关。 有3个关卡 可以暂停
堆栈 数据字典 枚举 UnityFacade 门面设计模式 从资源文件中获取音频文件 九、UnityFacade 门面设计模式
这是一个UnityFacade类的代码它是一个单例类用于管理游戏中的各种Manager包括AudioManager、UIManager、GameManager和SaveManager。下面是代码的逐行注释csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class UnityFacade : MonoBehaviour
{private AudioManager _audioManager; //声明一个私有的AudioManager对象private UIManager _uiManager; //声明一个私有的UIManager对象private GameManager _gameManager; //声明一个私有的GameManager对象private SaveManager _saveManager; //声明一个私有的SaveManager对象private float _timer; //声明一个私有的计时器变量//声明一个公有的计时器属性public float Timer{get { return _timer; }set { _timer value; }}//声明一个公有的GameManager属性public GameManager GameManager{get { return _gameManager; }}//声明一个公有的UIManager属性public UIManager UiManager{get { return _uiManager; }}//声明一个公有的AudioManager属性public AudioManager AudioManager{get { return _audioManager; }}//声明一个公有的SaveManager属性public SaveManager SaveManager{get { return _saveManager; }}//声明一个私有的静态UnityFacade对象private static UnityFacade _instance;//声明一个公有的静态UnityFacade对象用于获取UnityFacade的单例public static UnityFacade Instance{get { return _instance; }}//在Awake中初始化单例private void Awake(){if (_instance null){_instance this;}}void Start(){//实例化所有Manager_audioManager new AudioManager();_uiManager new UIManager();_gameManager new GameManager();_saveManager new SaveManager();//调用所有的Manager的OnInit方法_audioManager.OnInit();_uiManager.OnInit();_saveManager.OnInit();_gameManager.OnInit();}// Update is called once per framevoid Update(){//调用所有Manager的OnUpdate方法_audioManager.OnUpdate();_uiManager.OnUpdate();_gameManager.OnUpdate();_saveManager.OnUpdate();}//在销毁对象时调用所有Manager的OnDestroy方法private void OnDestroy(){_audioManager.OnDestroy();_uiManager.OnDestroy();_gameManager.OnDestroy();_saveManager.OnDestroy();}//启动计时器倒计时public void StartTimerCountDown(){StartCoroutine(_gameManager.TimerCountIEnumerator());}//生成奖励物品public void SpawnAward(){_gameManager.SpawnAward();}//生成惩罚物品public void SpawnPunishment(){_gameManager.SpawnPunishment();}
}UnityFacade类是一个单例类用于管理游戏中的各种Manager包括AudioManager、UIManager、GameManager和SaveManager。在Start函数中实例化所有Manager并调用其OnInit方法然后在Update函数中调用所有Manager的OnUpdate方法确保所有Manager都在运行。在OnDestroy函数中调用所有Manager的OnDestroy方法确保在销毁对象时所有Manager都被正确销毁。此外UnityFacade类还提供了一些公有方法如StartTimerCountDown、SpawnAward和SpawnPunishment用于管理游戏中的一些功能。 二、 声音全局管理器
这段代码的作用是实现游戏中的音频管理具体包括以下功能 创建音频管理器在OnInit方法中创建一个名为AudiManager的GameObject并将其作为音频管理器的根节点。同时创建名为BGM和Sound的子节点并将背景音乐和音效的AudioSource组件分别添加到这两个子节点上。 加载音频资源在LoadAudioResources方法中使用Resources.Load方法加载所有的背景音乐和音效资源并将它们存储在对应的字典中。其中BGMType和SoundType是两个枚举类型用于区分不同的背景音乐和音效。 播放背景音乐通过PlayBGM方法可以播放指定类型的背景音乐。在此方法中通过字典查找找到对应的音频资源并将其设置为_bgmAudioSource的clip属性最后调用Play方法开始播放背景音乐。 停止背景音乐通过StopBGM方法可以停止当前正在播放的背景音乐。 播放音效通过PlaySound方法可以播放指定类型的音效。在此方法中通过字典查找找到对应的音频资源并调用PlayOneShot方法播放音效。 单例模式通过将AudioManager继承自BaseManager并利用BaseManager的单例模式确保全局只有一个音频管理器实例。 枚举类型通过BGMType和SoundType枚举类型区分不同的背景音乐和音效。 继承和虚方法将AudioManager继承自BaseManager并重写OnInit方法实现了音频管理器的抽象和多态。 Resources功能使用Unity中的Resources.Load方法加载音频资源实现了游戏中的音频动态加载和卸载。 委托和事件通过定义PlayBGMEvent和StopBGMEvent委托类型和相应的事件使得其他游戏对象可以订阅和响应这些事件实现了游戏中音频播放和停止的协作功能。
C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AudioManager : BaseManager
{//定义两个音源组件private AudioSource _bgmAudioSource;private AudioSource _soundAudioSource;//定义背景音乐和音效的字典private DictionaryBGMType, AudioClip _bgmDict;private DictionarySoundType, AudioClip _soundDict;//初始化方法public override void OnInit(){//创建音频管理器、背景音乐、音效三个游戏对象并设置它们的父节点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);//给背景音乐和音效游戏对象添加音源组件_bgmAudioSource bgm.AddComponentAudioSource();_soundAudioSource sound.AddComponentAudioSource();//设置音源组件的初始值背景音乐循环播放音效不循环都不立即播放_bgmAudioSource.loop true;_bgmAudioSource.playOnAwake true;_soundAudioSource.loop false;_soundAudioSource.playOnAwake false;//设置背景音乐的默认音量_bgmAudioSource.volume 0.1f;//加载声音资源LoadAudioResources();}//加载声音资源private void LoadAudioResources(){//背景音乐资源的加载AudioClip aboutUsClip Resources.LoadAudioClip(BGM/AboutUs);AudioClip gameBgm1Clip Resources.LoadAudioClip(BGM/GameBgm1);AudioClip gameBgm2Clip Resources.LoadAudioClip(BGM/GameBgm2);AudioClip gameBgm3Clip Resources.LoadAudioClip(BGM/GameBgm3);AudioClip gameBgm4Clip Resources.LoadAudioClip(BGM/GameBgm4);AudioClip gameBgm5Clip Resources.LoadAudioClip(BGM/GameBgm5);AudioClip mainPanelClip Resources.LoadAudioClip(BGM/MainPanel);//将背景音乐资源添加到字典中_bgmDict new DictionaryBGMType, 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.LoadAudioClip(Sounds/Award);AudioClip brickClip Resources.LoadAudioClip(Sounds/Brick);AudioClip brick1Clip Resources.LoadAudioClip(Sounds/Brick1);AudioClip brickDestroyClip Resources.LoadAudioClip(Sounds/Brick_Destroy);AudioClip buttonClip Resources.LoadAudioClip(Sounds/Button);AudioClip failedClip Resources.LoadAudioClip(Sounds/Failed);AudioClip fallDownClip Resources.LoadAudioClip(Sounds/Fall_Down);AudioClip jumpClip Resources.LoadAudioClip(Sounds/Jump);AudioClip punishmentClip Resources.LoadAudioClip(Sounds/Punishment);AudioClip winClip Resources.LoadAudioClip(Sounds/Win);AudioClip winPerfectClip Resources.LoadAudioClip(Sounds/WinPerfect);//将音效资源添加到字典中_soundDict new DictionarySoundType, 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){//停止当前背景音乐的播放_bgmAudioSource.Stop();//设置新的背景音乐并播放_bgmAudioSource.clip _bgmDict[bgmType];_bgmAudioSource.Play();}//播放音效public void PlaySound(SoundType soundType){//停止当前音效的播放_soundAudioSource.Stop();//设置新的音效并播放_soundAudioSource.clip _soundDict[soundType];_soundAudioSource.Play();}//关闭BGM播放public void StopBGM(){_bgmAudioSource.Stop();}//音量控制public void ControlVolume(float bgmVolume, float soundVolume){_bgmAudioSource.volume bgmVolume;_soundAudioSource.volume soundVolume;}//以下三个方法都是空实现不做任何操作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
}测试音频代码
下面这两段代码用于测试音频组件可以复用 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(){//实例化所有Manager_audioManager new AudioManager();// 调用所有的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
该抽象类定义了一个基本的管理器其具体实现可以继承该类并实现三个抽象方法以满足具体的需求。其中OnInit() 方法用于初始化管理器、OnUpdate() 方法用于在每帧更新管理器、OnDestroy() 方法用于销毁管理器。这样我们就可以通过继承该类来编写各种各样的管理器从而更好地管理游戏中的各种资源、对象和逻辑。
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
这段代码主要实现了一个UI管理器其中包括了以下功能
加载面板根据传入的面板类型从预设体字典中获取对应的预设体并实例化然后执行该面板的OnEnter方法同时将该面板入栈。关闭弹出顶层面板从栈中弹出顶层面板并执行该面板的OnExit方法同时恢复下一个面板的OnResume方法。初始化获取Canvas的Transform属性初始化预设体字典和已实例化面板字典并加载第一个面板。枚举类型定义了PanelType枚举类型包括了所有的面板类型。
补充说明
BaseManager是一个抽象类该UIManager类继承自BaseManager并且需要实现其中的三个虚函数OnInit、OnUpdate和OnDestroy。该UIManager类中还定义了一个InstantiatedPanelDict属性用于获取已实例化面板字典。
csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class UIManager : BaseManager
{private Transform _canvasTransform; //Canvas的Transform组件private DictionaryPanelType, GameObject _uiPanelPrefabDict; //UI面板预制体字典private DictionaryPanelType, BasePanel _instantiatedPanelDict; //实例化的UI面板字典private StackBasePanel _panelStack; //UI面板栈public DictionaryPanelType, BasePanel InstantiatedPanelDict{get { return _instantiatedPanelDict; }}/// summary/// 加载面板/// /summary/// param namepanelType/param/// returns/returnspublic BasePanel PushPanel(PanelType panelType){//从实例化的面板字典中获取该面板BasePanel panel null;_instantiatedPanelDict.TryGetValue(panelType, out panel);if (panel null){//说明该面板从未实例化过从未入栈此处需要实例化GameObject panelPrefab _uiPanelPrefabDict[panelType];GameObject panelGO GameObject.Instantiate(panelPrefab, _canvasTransform, false);panel panelGO.GetComponentBasePanel();_instantiatedPanelDict.Add(panelType, panel); //将该面板加入实例化的面板字典中}else{//说明该面板已经实例化入栈后被出栈处于被禁用状态需要重新启用panel.gameObject.SetActive(true);}//执行该Panel的OnEnterpanel.OnEnter();if (_panelStack.Count 0){BasePanel peekPanel _panelStack.Peek();peekPanel.OnPause();}_panelStack.Push(panel); //将该面板入栈return panel;}/// summary/// 关闭弹出顶层面板/// /summarypublic 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;//初始化面板预制体字典_uiPanelPrefabDict new DictionaryPanelType, GameObject();_uiPanelPrefabDict.Add(PanelType.Main, Resources.LoadGameObject(UIPanel/Panel_Main));_uiPanelPrefabDict.Add(PanelType.Game, Resources.LoadGameObject(UIPanel/Panel_Game));_uiPanelPrefabDict.Add(PanelType.Result, Resources.LoadGameObject(UIPanel/Panel_Result));_uiPanelPrefabDict.Add(PanelType.Battle, Resources.LoadGameObject(UIPanel/Panel_Battle));_uiPanelPrefabDict.Add(PanelType.Fail, Resources.LoadGameObject(UIPanel/Panel_Fail));_uiPanelPrefabDict.Add(PanelType.Success, Resources.LoadGameObject(UIPanel/Panel_Success));_uiPanelPrefabDict.Add(PanelType.Pause, Resources.LoadGameObject(UIPanel/Panel_Pause));_uiPanelPrefabDict.Add(PanelType.Level, Resources.LoadGameObject(UIPanel/Panel_Level));_uiPanelPrefabDict.Add(PanelType.Index, Resources.LoadGameObject(UIPanel/Panel_Index));//初始化_instantiatedPanelDict new DictionaryPanelType, BasePanel();_panelStack new StackBasePanel();//加载第一个Panel// PushPanel(PanelType.Main);}public override void OnUpdate(){}public override void OnDestroy(){}
}public enum PanelType
{Main,Game,Result,Battle,Fail,Success,Pause,Level,Index
}
这段代码实现了一个UI管理器用于管理游戏中的UI面板。其中PushPanel()函数用于加载面板PopPanel()函数用于关闭顶层面板OnInit()函数用于在UI管理器被初始化时加载第一个面板。
UI管理器中使用了一个面板栈_panelStack用于存储当前打开的所有UI面板实现了UI面板的层级管理。同时还使用了两个面板字典_uiPanelPrefabDict和_instantiatedPanelDict用于存储预制体和实例化的面板。
代码中使用了单例模式实现了UI管理器的唯一性。同时还继承了BaseManager类实现了对游戏管理器的统一管理。 四、 UI按钮的引用
父类 BasePanel
这四个方法是状态机中状态的生命周期方法用于管理状态的进入、暂停、恢复和退出。
具体来说当一个状态被切换到时首先会调用OnEnter()方法用于初始化状态的数据和变量。当状态被暂停时例如切换到其他状态会调用OnPause()方法用于暂停状态的逻辑和动画。当状态恢复时例如从其他状态切换回该状态会调用OnResume()方法用于恢复状态的逻辑和动画。当状态被退出时会调用OnExit()方法用于清理状态的数据和变量。
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public abstract class BasePanel : MonoBehaviour // 定义一个抽象类 BasePanel继承自 MonoBehaviour 类
{public abstract void OnEnter(); // 声明一个抽象方法 OnEnter由子类实现public abstract void OnPause(); // 声明一个抽象方法 OnPause由子类实现public abstract void OnResume(); // 声明一个抽象方法 OnResume由子类实现public abstract void OnExit(); // 声明一个抽象方法 OnExit由子类实现} 子类主面板 MainPanel
定义MainPanel类继承自BasePanel。定义开始按钮和关闭按钮两个公共属性。在Start()方法中添加开始按钮和关闭按钮的点击事件监听器。在StartButtonClicked()方法中调用UnityFacade.Instance.UiManager.PushPanel()方法实现面板的切换到GamePanel。在CloseButtonClicked()方法中调用UnityFacade.Instance.UiManager.PopPanel()方法实现当前面板的弹出。在OnEnter()方法中实现面板进入时的操作。在OnPause()方法中禁用开始按钮和关闭按钮实现面板暂停时的操作。在OnResume()方法中启用开始按钮和关闭按钮实现面板恢复时的操作。在OnExit()方法中隐藏当前面板实现面板退出时的操作。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class MainPanel : BasePanel //继承自BasePanel
{public Button startBtn; //开始按钮public Button closeBtn; //关闭按钮private void Start(){//添加开始按钮点击事件监听器startBtn.onClick.AddListener(delegate { StartButtonClicked(); });//添加关闭按钮点击事件监听器closeBtn.onClick.AddListener(delegate { CloseButtonClicked(); });}private void StartButtonClicked(){//点击开始按钮推入GamePanelUnityFacade.Instance.UiManager.PushPanel(PanelType.Game);}private void CloseButtonClicked(){//点击关闭按钮弹出当前面板UnityFacade.Instance.UiManager.PopPanel();}public override void OnEnter(){//面板进入时调用此方法Debug.Log(MainPanel加载了);}public override void OnPause(){//面板暂停时调用此方法禁用开始按钮和关闭按钮startBtn.interactable false;closeBtn.interactable false;}public override void OnResume(){//面板恢复时调用此方法启用开始按钮和关闭按钮startBtn.interactable true;closeBtn.interactable true;}public override void OnExit(){//面板退出时调用此方法隐藏当前面板this.gameObject.SetActive(false);}
} 子类 游戏中 GamePanel
这段代码实现了一个游戏面板GamePanel继承自一个基础面板BasePanel并实现了在面板中的按钮点击事件。具体来说这个面板有两个按钮resultBtn和closeBtn点击resultBtn会跳转到一个结果面板PanelType.Result而点击closeBtn会关闭当前面板。
在 Start() 方法中通过监听按钮的点击事件来实现按钮的功能即 resultBtn 点击时调用 ResultButtonClicked() 方法closeBtn 点击时调用 CloseButtonClicked() 方法。ResultButtonClicked() 方法中调用了 UnityFacade.UiManager.PushPanel() 方法用于跳转到结果面板而 CloseButtonClicked() 方法中调用了 UnityFacade.UiManager.PopPanel() 方法用于关闭当前面板。
在 OnEnter() 方法中当这个游戏面板被打开时会输出一个 Debug.Log() 信息提示面板被打开了。
在 OnPause() 方法中当这个游戏面板被暂停时会将 resultBtn 和 closeBtn 的 interactable 属性设置为 false即这两个按钮将不再响应点击事件。
在 OnResume() 方法中当这个游戏面板从暂停状态中恢复时会将 resultBtn 和 closeBtn 的 interactable 属性设置为 true即这两个按钮将重新响应点击事件。
在 OnExit() 方法中当这个游戏面板被关闭时会将这个游戏面板的 gameObject 设置为不可见即关闭这个游戏面板。 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;// 继承自 BasePanel
public class GamePanel : BasePanel
{// 定义两个按钮public Button resultBtn;public Button closeBtn;// 在 Start 函数中添加按钮点击事件监听private void Start(){resultBtn.onClick.AddListener(delegate { ResultButtonClicked(); });closeBtn.onClick.AddListener(delegate { CloseButtonClicked(); });}// 点击结果按钮的处理函数private void ResultButtonClicked(){// 调用 UnityFacade 的 UiManager 的 PushPanel 函数打开结果面板UnityFacade.Instance.UiManager.PushPanel(PanelType.Result);}// 点击关闭按钮的处理函数private void CloseButtonClicked(){// 调用 UnityFacade 的 UiManager 的 PopPanel 函数关闭当前面板UnityFacade.Instance.UiManager.PopPanel();}// 进入面板时的处理函数public override void OnEnter(){Debug.Log(GamePanel打开了);}// 暂停面板时的处理函数public override void OnPause(){// 将两个按钮设置为不可用resultBtn.interactable false;closeBtn.interactable false;}// 恢复面板时的处理函数public override void OnResume(){// 将两个按钮设置为可用resultBtn.interactable true;closeBtn.interactable true;}// 退出面板时的处理函数public override void OnExit(){// 将自身的 gameObject 设置为不可见this.gameObject.SetActive(false);}
}子类 游戏结果 ResultPanel
它实现了一个游戏面板名为ResultPanel。这个面板里有一个按钮名为closeBtn点击它可以关闭当前面板。这个面板继承自BasePanel类因此实现了BasePanel类中定义的四个方法OnEnter、OnPause、OnResume、OnExit。其中OnEnter方法是在面板打开时被调用的OnPause方法是在面板被暂停时被调用的OnResume方法是在面板恢复时被调用的OnExit方法是在面板关闭时被调用的。在这里OnEnter方法只是打印了一条调试信息。Start方法用于初始化面板它给closeBtn按钮添加了一个事件监听器当按钮被点击时会执行CloseButtonClicked方法。CloseButtonClicked方法中通过UnityFacade.Instance.UiManager.PopPanel()方法关闭当前面板。
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 () {}
} 角色动画器、控制角色移动
角色可以跳跃、行走 游戏奖惩道具
掉血的砖块用数组存储四张图片踩一下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);}}保护罩玩家得到后不受任何伤害 protectorGO.SetActive(true);红色感叹号炸弹计时器减少10秒钟 绿色感叹号计时器时间增加10秒钟 死亡小球玩家碰到后 直接游戏结束 private void Move(){if (Math.Abs(_rigidbody2D.velocity.x) 0.05f_isOnGround){if (_direction MoveDirection.Left){ _rigidbody2D.velocitynew Vector2((int)MoveDirection.Right*vSpeed,0);_direction MoveDirection.Right;}else if (_direction MoveDirection.Right){_rigidbody2D.velocitynew Vector2((int)MoveDirection.Left*vSpeed,0);_direction MoveDirection.Left;}}}过关星星动画