【UnityRPG游戏制作】Unity_RPG项目_PureMVC框架应用

news2024/11/27 22:46:06

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创
👨‍💻 收录于专栏:就业宝典

🅰️推荐专栏

⭐-软件设计师高频考点大全



文章目录

    • 前言
    • (==3==)PureMVC框架面板系统
        • **SetPanel**
        • **GamePanel**
        • statePanel
        • backPackPanel
        • RolePanel
        • SotrePanel
        • TipPanel
        • StartTipPanel
        • NPCTipPanel
        • GameOVerPanel
        • GamePassPanel(Clone)
    • 🅰️


前言

请添加图片描述



3PureMVC框架面板系统


在这里插入图片描述

SetPanel

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能:  设置面板视图
//-------创建者:         -------
//------------------------------

public class SetView : BasePanel
{
    public Button stayBtu;     //继续游戏按钮
    public Slider soundSlider; //音量滑动条    
      
}

using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//-------------------------------
//-------功能: 设置面板视图中介
//-------创建者:         -------
//------------------------------

public class SetViewMediator : Mediator
{
    //铭牌名
    public static string NAME = "SetViewMediator";

    /// <summary>
    /// 构造函数
    /// </summary>
    public SetViewMediator() : base(NAME)
    {
    }

    /// <summary>
    /// 重写监听感兴趣的通知的方法
    /// </summary>
    /// <returns>返回你需要监听的通知的名字数组</returns>
    public override string[] ListNotificationInterests()
    {
        return new string[] {
        
        };
    }

    /// <summary>
    /// 面板中组件设置(监听相关)
    /// </summary>
    /// <param name="stateView"></param>
    public void setView(SetView seteView)
    {
        ViewComponent = seteView;
        seteView.stayBtu.onClick.AddListener(() =>
        {
            SendNotification(PureNotification.HIDE_PANEL, "SetPanel");
        });
        //音乐滑动条
        seteView.soundSlider.onValueChanged.AddListener((vlaue) => 
        {
            PlayerContorller.GetInstance().audioClip.volume = vlaue;
        });

    }

    /// <summary>
    /// 玩家受伤逻辑
    /// </summary>
    public void Hurt()
    {

    }

    /// <summary>
    /// 重写处理通知的方法,处理通知,前提是完成通知的监听
    /// </summary>
    /// <param name="notification">通知</param>
    public override void HandleNotification(INotification notification)
    {

    }


 }

GamePanel

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能:  游戏面板视图
//-------创建者:         -------
//------------------------------

public class GameView : BasePanel
{
    public Slider audioSliderVuale;  //音量滑动条
    public Button startBtu;    //开始按钮
    public Button tipBtu;      //游戏说明按钮

}

using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

//-------------------------------
//-------功能:  游戏面板视图中介
//-------创建者:         -------
//------------------------------

public class GameViewMediator : Mediator
{
    //铭牌名
    public static string NAME = "GameViewMediator";

    /// <summary>
    /// 构造函数
    /// </summary>
    public GameViewMediator() : base(NAME)
    {
    }

    /// <summary>
    /// 重写监听通知的方法,返回需要的监听(通知)
    /// </summary>
    /// <returns>返回你需要监听的通知的名字数组</returns>
    public override string[] ListNotificationInterests()
    {
        return new string[] {
         //PureNotification.UPDATA_ROLE_INFO,
         //PureNotification.UPDATA_STATE_INFO
        };
    }

    /// <summary>
    /// 面板中组件设置(监听相关)
    /// </summary>
    /// <param name="gameView"></param>
    public void SetView(GameView   gameView)
    {
        Debug.Log(gameView+"执行SetView");
        ViewComponent = gameView;
        //开始按钮逻辑监听
        gameView.startBtu.onClick.AddListener(()=>
        {
            Time.timeScale = 1;//取消游戏暂停
            SendNotification(PureNotification.HIDE_PANEL, "GamePanel");
            SendNotification(PureNotification.SHOW_PANEL, "StatePanel");
        });
        gameView.tipBtu .onClick.AddListener(() =>
        {
            SendNotification(PureNotification.SHOW_PANEL , "StartTipPanel");
        });

        //音乐滑动条
        gameView.audioSliderVuale .onValueChanged.AddListener((vlaue) =>
        {
            PlayerContorller.GetInstance().audioClip.volume = vlaue;
        });
    }

    /// <summary>
    /// 重写处理通知的方法,处理通知
    /// </summary>
    /// <param name="notification">通知</param>
    public override void HandleNotification(INotification notification)
    {
        switch (notification.Name)
        {
            //case PureNotification.UPDATA_STATE_INFO:
            //    (ViewComponent as StateView).UpdateView(notification.Body as PlayerDataObj);
            //    break;
        }
    }
}

statePanel

在这里插入图片描述

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能:  状态面板视图
//-------创建者:         -------
//------------------------------


public class StateView : BasePanel 
{
    //1.找控件
    public TextMeshProUGUI levelText;     //等级    
    public TextMeshProUGUI bloodValue;    //当前血量   
    public TextMeshProUGUI attackVaule;   //攻击力值   
    public float  blood ,maxBlood, attack;    
    public Slider hpSlider;    //玩家血条   
    public Slider expSlider;   //经验血条   
    public Slider bossSlider;  //Boss血条   
    public Button roleBtu;     //角色按钮   
    public Button backpackBtu; //背包按钮  
    public Image  weaponSprite;//当前武器  
    public Text damon;     //当前钻石的数量

/// <summary>
    /// 2.更新面板视图View的显示数据
    /// </summary>
    public void UpdateView(PlayerDataObj data)   //此处选择的是MVC的思想,在这里些许有些耦合
    {
        Debug.Log("来更新了");
        if(data != null)
        {
            blood = data.blood;
            attack = data.attack;
            maxBlood = data.maxBlood;   
            levelText.text = Convert.ToString(data.level);
            bloodValue.text = Convert.ToString(data.blood); 
            attackVaule.text = Convert.ToString(data.attack); 
            bossSlider.value = data.blood / data.maxBlood;
            weaponSprite.sprite = data.nowItem ;
            damon.text = Convert.ToString(PlayerContorller.GetInstance().damonNum ); 
        }
        else
        {
            Debug.Log("date为空");
        }
    }


    /// <summary>
    /// 增加钻石
    /// </summary>
    public void UpdateDamon()
    {
        damon.text = PlayerContorller .GetInstance().damonNum .ToString ();
    }



}

using PureMVC.Core;
using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能:  状态面板视图中介
//-------创建者:         
//------------------------------


/// <summary>
/// 状态面板视图中介
/// 固定:
/// 1.继承PureMVC的Mediator脚本
/// 2.写构造函数
/// 3.重写监听通知的方法
/// 4.重写处理通知的方法
/// 5.可选:重写注册时的方法
/// </summary>
public class StateViewMediator : Mediator
{   
    //铭牌名
    public static string NAME = "StateViewMediator";

    /// <summary>
    /// 构造函数
    /// </summary>
    public StateViewMediator() : base(NAME)
    {
    }

    /// <summary>
    /// 重写监听感兴趣的通知的方法
    /// </summary>
    /// <returns>返回你需要监听的通知的名字数组</returns>
    public override string[] ListNotificationInterests()
    {
        return new string[] {
         PureNotification.UPDATA_STATE_INFO,
         PureNotification.PLAYER_INJURY ,
         PureNotification.LEVEL_UP ,
         PureNotification.UPDATA_WEAPON_INFO2,
         PureNotification .UPDATA_EXP,
         PureNotification.UPDATA_DAMON
        };
    }

    /// <summary>
    /// 面板中组件设置(监听相关)
    /// </summary>
    /// <param name="stateView"></param>
    public void setView(StateView stateView)
    {
        ViewComponent = stateView;
        stateView.roleBtu.onClick.AddListener(()=>
        {
            //SendNotification(PureNotification.HIDE_PANEL, "StatePanel");
            SendNotification(PureNotification.SHOW_PANEL, "RolePanel");
        });
        stateView.backpackBtu.onClick.AddListener(() =>
        {
            //SendNotification(PureNotification.HIDE_PANEL, "StatePanel");
            SendNotification(PureNotification.SHOW_PANEL, "BackpackPanel");
        });   
    }
       
    /// <summary>
    /// 玩家受伤逻辑
    /// </summary>
    public void Hurt()
    {

    }

    /// <summary>
    /// 重写处理通知的方法,处理通知,前提是完成通知的监听
    /// </summary>
    /// <param name="notification">通知</param>
    public override void HandleNotification(INotification notification)
    {
        switch (notification.Name)
        {
            case PureNotification.UPDATA_STATE_INFO: //状态更新的处理逻辑
                       
                    (ViewComponent as StateView).UpdateView(notification.Body as PlayerDataObj);
                
                break;
            case PureNotification.PLAYER_INJURY : //玩家受伤命令的处理逻辑

                if (ViewComponent != null)
                {
                    StateView stateView = ViewComponent as StateView;
                    int blood = Convert.ToInt32(notification.Body);
                    stateView.blood -= blood ;
                    stateView.blood = stateView.blood > stateView.maxBlood ? stateView.maxBlood : stateView.blood; //防止血条溢出
                    float off = stateView.blood / stateView.maxBlood;
                    stateView.hpSlider.value = off; //改变血条
                    if(off <= 0)//如果血条变成0或者小于0,则玩家死亡
                    {
                        PlayerContorller.GetInstance().isDied = true;
                        PlayerContorller.GetInstance().DiedEvent();//开启死亡
                    }
                }
                break;    
            case PureNotification.UPDATA_WEAPON_INFO2 :  //玩家武器信息更新的处理逻辑
                if (ViewComponent != null)
                {
                    StateView stateView = ViewComponent as StateView;
                    stateView.weaponSprite.sprite   = notification .Body as Sprite  ;
                    stateView.weaponSprite.enabled = true;
                }
                break;
            case PureNotification.UPDATA_EXP ://玩家经验信息更新的处理逻辑
                if (ViewComponent != null)
                {
                    StateView stateView = ViewComponent as StateView;
                    int exp = Convert.ToInt32(notification.Body);
                    float off = exp / 100f;
                    Debug.Log("来了"+off);
                    stateView.expSlider .value = off; //改变经验条
                    if(off >= 1 )  //经验条满
                    {
                        stateView.blood = stateView.maxBlood;
                        if (!Facade.HasProxy (PlayerProxy.NAME))  //首先判断是否有该中介,没有就new一个
                        {
                            Facade.RegisterProxy(new PlayerProxy()); //注册该视图中介
                        }
                        //获取视图对应的代理
                        PlayerProxy bm = Facade.RetrieveProxy(PlayerProxy.NAME) as PlayerProxy;
                        bm.LevUp();  //数据升级的方法
                        stateView.UpdateView(bm.Data as PlayerDataObj); //升级数据
                        stateView.expSlider.value = 0;
                        PlayerContorller.GetInstance().exp = 0; //经验条归位
                    }
                }
                break;
            case PureNotification.UPDATA_DAMON:
                {
                    if (ViewComponent != null)
                    {
                        StateView stateView = ViewComponent as StateView;
                        stateView.UpdateDamon(); //执行增加钻石的方法
                    }
                    break;
                }
        }
    }

}

backPackPanel

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能: 背包系统视图
//-------创建者:         
//------------------------------

public class BackpackView : BasePanel
{
    public Button back; //退出按钮
    public GridLayoutGroup grid; 
                                 

    /// <summary>
    /// 更新背包中的内容
    /// </summary>
    /// <param name="itemBtu"></param>
    public void AddItem(Button itemBtu)
    {
        try
        {
            Destroy(itemBtu.transform.GetComponent<ShopItem>());   //移除该商品的脚本
            itemBtu.transform.AddComponent<PropItem>(); //重新添加脚本

        }
        catch { }


        //将传入的按钮设置为布局下面的子物体
        itemBtu.transform.SetParent (grid.gameObject.transform );
        itemBtu.transform.localScale = Vector3.one ;//初始化商品道具大小

    }

}





RolePanel

在这里插入图片描述

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能:  角色面板视图
//-------创建者:         -------
//------------------------------

public class RoleView : BasePanel
{
    //1.找控件
    public Button back;        //退出
    public Text levelText;     //等级
    public Text maxBlood;      //最大血量
    public Text attackVaule;   //攻击力值
    public Text defenceVaule;  //防御力值
    public Text CriticalVaule; //暴击率
    public Image[] item; //武器栏图
    public GameObject[] role;  //显示角色选择

    /// <summary>
    /// 2.更新面板视图View的显示数据
    /// </summary>
    public void UpdateView(PlayerDataObj data)   //此处选择的是MVC的思想,在这里些许有些耦合
    {
      
        if (data != null)
        {
            levelText.text = data.level.ToString();
            maxBlood.text  = data.maxBlood.ToString();
            attackVaule.text   = data.attack.ToString();
            defenceVaule.text  = data.denfence.ToString();
            CriticalVaule.text = data.strike.ToString();
           
          
        }
        else
        {
            Debug.Log("角色面板无法更新");
        }
      
    }

    /// <summary>
    /// 更新武器栏中的图片
    /// </summary>
    /// <param name="item"></param>
    public void UpdateWeaponItem(PlayerDataObj data)
    {
        Debug.Log("更新武器");
        if (data.index < 3 && PlayerContorller.GetInstance().curWeaponNum >0)
        {
            this.item[data.index].enabled = true;
            this.item[data.index++].sprite = data.nowItem;
        }      
    }
}

using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//-------------------------------
//-------功能:  角色面板视图中介
//-------创建者:         -------
//------------------------------

/// <summary>
/// 角色面板视图中介
/// 固定:
/// 1.继承PureMVC的Mediator脚本
/// 2.写构造函数
/// 3.重写监听通知的方法
/// 4.重写处理通知的方法
/// 5.可选:重写注册时的方法
/// </summary>
public class RoleViewMediator : Mediator
{
    //铭牌名
    public static string NAME = "RoleViewMediator";

    /// <summary>
    /// 构造函数
    /// </summary>
    public RoleViewMediator( ) : base(NAME)
    {
        //可以去写创捷面板预设体的逻辑等
    }

    /// <summary>
    /// 重写监听通知的方法,返回需要的监听(通知)
    /// </summary>
    /// <returns>返回你需要监听的通知的名字数组</returns>
    public  override string[] ListNotificationInterests()
    {
        return new string[] { 
         PureNotification.UPDATA_ROLE_INFO,
         PureNotification.UPDATA_WEAPON_INFO1
        };
    }

    public void SetView(RoleView roleView)
    {
        Debug.Log(roleView + "执行SetView");
        ViewComponent = roleView;
        //开始按钮逻辑监听
        roleView.back.onClick.AddListener(() =>
        {
            SendNotification(PureNotification.HIDE_PANEL, "RolePanel");
        });
 
    }

    /// <summary>
    /// 重写处理通知的方法,处理通知
    /// </summary>
    /// <param name="notification">通知</param>
    public override void HandleNotification(INotification notification)
    {
       switch (notification.Name)
        {
          case  PureNotification.UPDATA_ROLE_INFO:
                if (ViewComponent != null)
                {
                    (ViewComponent as RoleView).UpdateView(notification.Body as PlayerDataObj);
                    (ViewComponent as RoleView).UpdateWeaponItem(notification.Body as PlayerDataObj);

                }
                else { Debug.Log("为空"); }
                break;
          
        }
    }

    /// <summary>
    /// 可选:重写注册方法(他们需要到Facde中注册)
    /// </summary>
    public override void OnRegister()
    {
        base.OnRegister();
    }

}

SotrePanel

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能: 商城系统
//-------创建者:         -------
//------------------------------

public class StoreView : BasePanel
{
    public GridLayoutGroup StoreGrid;
    public GridLayoutGroup BackGrid;
    public Button backBtu;
    public Button bugPack;//放入背包

}

using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//-------------------------------
//-------功能:          -------
//-------创建者:         -------
//------------------------------

public class StoreViewMediator : Mediator
{
    //铭牌名
    public static string NAME = "StoreViewMediator";
    /// <summary>
    /// 构造函数
    /// </summary>
    public StoreViewMediator() : base(NAME)
    {
    }

    /// <summary>
    /// 重写监听感兴趣的通知的方法
    /// </summary>
    /// <returns>返回你需要监听的通知的名字数组</returns>
    public override string[] ListNotificationInterests()
    {
        return new string[] {

        };
    }

    /// <summary>
    /// 面板中组件设置(监听相关)
    /// </summary>
    /// <param name="stateView"></param>
    public void setView(StoreView storeView)
    {
        ViewComponent = storeView;
        if(ViewComponent == null) { Debug.Log("面板是空的"); }
        storeView.backBtu.onClick.AddListener(()=>
        {
            SendNotification(PureNotification.HIDE_PANEL, "StorePanel");
        });

        storeView.bugPack.onClick.AddListener(() =>
        {
            SendNotification(PureNotification.HIDE_PANEL, "StorePanel");
        });
        
    }

    /// <summary>
    /// 玩家受伤逻辑
    /// </summary>
    public void Hurt()
    {

    }

    /// <summary>
    /// 重写处理通知的方法,处理通知,前提是完成通知的监听
    /// </summary>
    /// <param name="notification">通知</param>
    public override void HandleNotification(INotification notification)
    {
        switch (notification.Name)
        {

        }
    }
}

TipPanel

在这里插入图片描述
在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能:  余额不足提示面板视图
//-------创建者:         -------
//------------------------------

public class TipView : BasePanel
{
    public Button ok;
}

using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//-------------------------------
//-------功能: 余额不足提示面板中介
//-------创建者:         -------
//------------------------------

public class TipViewMediator : Mediator
{
    //铭牌名
    public static string NAME = "TipViewMediator";
    /// <summary>
    /// 构造函数
    /// </summary>
    public TipViewMediator() : base(NAME)
    {
    }

    /// <summary>
    /// 重写监听感兴趣的通知的方法
    /// </summary>
    /// <returns>返回你需要监听的通知的名字数组</returns>
    public override string[] ListNotificationInterests()
    {
        return new string[] {

        };
    }

    /// <summary>
    /// 面板中组件设置(监听相关)
    /// </summary>
    /// <param name="stateView"></param>
    public void setView(TipView tipView)
    {
        ViewComponent = tipView;
        if (ViewComponent == null) { Debug.Log("面板是空的"); }
        tipView.ok.onClick.AddListener(() =>
        {
            SendNotification(PureNotification.HIDE_PANEL, "TipPanel");
        });
    }

    /// <summary>
    /// 玩家受伤逻辑
    /// </summary>
    public void Hurt()
    {

    }

    /// <summary>
    /// 重写处理通知的方法,处理通知,前提是完成通知的监听
    /// </summary>
    /// <param name="notification">通知</param>
    public override void HandleNotification(INotification notification)
    {
        switch (notification.Name)
        {

        }
    }
}

StartTipPanel

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能:  开始说明面板视图
//-------创建者:         -------
//------------------------------

public class StartTipView : BasePanel
{
    public Button startBtu; 

}

using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//-------------------------------
//-------功能:   开始说明面板视图中介
//-------创建者:         -------
//------------------------------

public class StartTipViewMediator : Mediator
{
    //铭牌名
    public static string NAME = "StartTipViewMediator";

    /// <summary>
    /// 构造函数
    /// </summary>
    public StartTipViewMediator() : base(NAME)
    {
    }

    /// <summary>
    /// 重写监听通知的方法,返回需要的监听(通知)
    /// </summary>
    /// <returns>返回你需要监听的通知的名字数组</returns>
    public override string[] ListNotificationInterests()
    {
        return new string[] {
         //PureNotification.UPDATA_ROLE_INFO,
         //PureNotification.UPDATA_STATE_INFO
        };
    }

    public void SetView(StartTipView startTipView)
    {
        Debug.Log(startTipView + "执行SetView");
        ViewComponent = startTipView;
        //按钮逻辑监听
        startTipView.startBtu.onClick.AddListener(() =>
        {
            SendNotification(PureNotification.HIDE_PANEL, "GamePanel");
            SendNotification(PureNotification.HIDE_PANEL, "startTipPanel");
            SendNotification(PureNotification.SHOW_PANEL, "StatePanel");

        });
    }

    /// <summary>
    /// 重写处理通知的方法,处理通知
    /// </summary>
    /// <param name="notification">通知</param>
    public override void HandleNotification(INotification notification)
    {
        switch (notification.Name)
        {
            //case PureNotification.UPDATA_STATE_INFO:
            //    (ViewComponent as StateView).UpdateView(notification.Body as PlayerDataObj);
            //    break;
        }
    }
}

NPCTipPanel

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能: NPC交互面板视图
//-------创建者:         -------
//------------------------------

public class NPCTipView : BasePanel
{
    public Button backBtu;
}

using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//-------------------------------
//-------功能: NPC交互面板视图中介
//-------创建者:         -------
//------------------------------

/// <summary>
/// 状态面板视图中介
/// 固定:
/// 1.继承PureMVC的Mediator脚本
/// 2.写构造函数
/// 3.重写监听通知的方法
/// 4.重写处理通知的方法
/// 5.可选:重写注册时的方法
/// </summary>
public class NPCTipViewMediator : Mediator
{
    //铭牌名
    public static string NAME = "NPCTipViewMediator";

    /// <summary>
    /// 构造函数
    /// </summary>
    public NPCTipViewMediator() : base(NAME)
    {
    }

    /// <summary>
    /// 面板中组件设置(监听相关)
    /// </summary>
    public void SetView(NPCTipView npcTipView)
    {
        Debug.Log(npcTipView + "执行SetView");
        ViewComponent = npcTipView;
        //出击按钮逻辑监听
        npcTipView.backBtu.onClick.AddListener(() =>
        {
            SendNotification(PureNotification.HIDE_PANEL, "NPCTipPanel");          
        });
    }


    /// <summary>
    /// 重写监听通知的方法,返回需要的监听(通知)
    /// </summary>
    /// <returns>返回你需要监听的通知的名字数组</returns>
    public override string[] ListNotificationInterests()
    {
        return new string[] {
         //PureNotification.UPDATA_ROLE_INFO,
         //PureNotification.UPDATA_STATE_INFO
        };
    }



    /// <summary>
    /// 重写处理通知的方法,处理通知
    /// </summary>
    /// <param name="notification">通知</param>
    public override void HandleNotification(INotification notification)
    {
        switch (notification.Name)
        {
            //case PureNotification.UPDATA_STATE_INFO:
            //    (ViewComponent as StateView).UpdateView(notification.Body as PlayerDataObj);
            //    break;
        }
    }
}

GameOVerPanel

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能: 失败面板视图
//-------创建者:         -------
//------------------------------

public class DefeatView : BasePanel
{
    public Button restartBtu; //重新开始按钮
    public Button endBtu;     //结束按钮
}

using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

//-------------------------------
//-------功能:  失败面板视图中介
//-------创建者:         -------
//------------------------------

/// <summary>
/// 状态面板视图中介
/// 固定:
/// 1.继承PureMVC的Mediator脚本
/// 2.写构造函数
/// 3.重写监听通知的方法
/// 4.重写处理通知的方法
/// 5.可选:重写注册时的方法
/// </summary>
public class DefeatViewMediator : Mediator
{
    //铭牌名
    public static string NAME = "DefeatViewMediator";

    /// <summary>
    /// 构造函数
    /// </summary>
    public DefeatViewMediator() : base(NAME)
    {
    }

    /// <summary>
    /// 重写监听通知的方法,返回需要的监听(通知)
    /// </summary>
    /// <returns>返回你需要监听的通知的名字数组</returns>
    public override string[] ListNotificationInterests()
    {
        return new string[] {
         //PureNotification.UPDATA_ROLE_INFO,
         //PureNotification.UPDATA_STATE_INFO
        };
    }

    public void SetView(DefeatView defeatView)
    {
        ViewComponent = defeatView;
       
        defeatView.restartBtu.onClick.AddListener(()=>{

        
            SendNotification(PureNotification.HIDE_PANEL ,"DefeatPanel");
            SceneManager.LoadScene(2);


        });
        defeatView.endBtu .onClick.AddListener(() => {
           
            SendNotification(PureNotification.HIDE_PANEL, "DefeatPanel");
            SceneManager.LoadScene(2);
        });
       
        
    }

    /// <summary>
    /// 重写处理通知的方法,处理通知
    /// </summary>
    /// <param name="notification">通知</param>
    public override void HandleNotification(INotification notification)
    {
        switch (notification.Name)
        {
            //case PureNotification.UPDATA_STATE_INFO:
            //    (ViewComponent as StateView).UpdateView(notification.Body as PlayerDataObj);
            //    break;
        }
    }
}

GamePassPanel(Clone)

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//-------------------------------
//-------功能: 通过游戏面板视图
//-------创建者:         -------
//------------------------------

public class GamePassView : BasePanel
{
    public Button okenter;
}

using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

//-------------------------------
//-------功能:    通过游戏面板视图中介
//-------创建者:         -------
//------------------------------

public class GamePassViewMediator : Mediator
{
    //铭牌名
    public static string NAME = "GamePassViewMediator";
    /// <summary>
    /// 构造函数
    /// </summary>
    public GamePassViewMediator() : base(NAME)
    {
    }

    /// <summary>
    /// 重写监听感兴趣的通知的方法
    /// </summary>
    /// <returns>返回你需要监听的通知的名字数组</returns>
    public override string[] ListNotificationInterests()
    {
        return new string[] {

        };
    }

    /// <summary>
    /// 面板中组件设置(监听相关)
    /// </summary>
    /// <param name="stateView"></param>
    public void setView(GamePassView tipView2)
    {
        ViewComponent = tipView2;
        if (ViewComponent == null) { Debug.Log("面板是空的"); }
        tipView2.okenter .onClick.AddListener(() =>
        {
            SendNotification(PureNotification.HIDE_PANEL, "GamePassPanel");
            SceneManager.LoadScene(2);
        });
    }

    /// <summary>
    /// 玩家受伤逻辑
    /// </summary>
    public void Hurt()
    {

    }

    /// <summary>
    /// 重写处理通知的方法,处理通知,前提是完成通知的监听
    /// </summary>
    /// <param name="notification">通知</param>
    public override void HandleNotification(INotification notification)
    {
        switch (notification.Name)
        {

        }
    }
}

🅰️


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1668672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

易图讯智慧公安警用三维电子沙盘系统

智慧公安警用三维电子沙盘系统是一个结合现代科技手段&#xff0c;为公安部门提供全面、高效、智能的警务管理解决方案的系统。该系统以“情报大数据、指挥扁平化、勤务可视化、情指勤一体化”为设计思想&#xff0c;整合了多台设备、有无线通讯、短信平台、天网、交通平台、治…

【Dash】开始学习dash

安装Dash 网上很多安装dash的教程&#xff0c;不再赘述 开始Dash 一个dash页面的基本写法 # dash 的基本写法 import dash from dash import html,dcc,callback,Input,Output# 创建一个 dash 应用 app dash.Dash()# 定义布局&#xff0c;定义一个输入框和一个输出框 app.l…

三、RocketMQ应用

RocketMQ应用 一、测试环境工程准备二、消息响应1.消息发送的状态-SendStatus2.producer消息Id-msgId3.broker消息Id-offsetMsgId 三、普通消息1.消息发送分类1.1 同步发送消息1.2 异步发送消息1.3 单向发送消息 2.代码举例2.1 同步消息发送生产者2.2 异步消息发送生产者2.3 单…

【C++11】线程库 | 互斥量 | 原子性操作 | 条件变量

文章目录 一、线程库 - thread1. 线程对象的构造方式无参构造带可变参数包的构造移动构造 2. thread类的成员函数thread::detach()thread::get_id()thread::join()thread::joinable() 线程函数参数的问题 二、互斥量库 - mutex标准库提供的四种互斥锁1. std::mutex2. std::recu…

报告!Golang冲上来啦!

今天又来讲Go语言&#xff0c;根据全球知名的编程语言排行榜TIOBE在4月份公布的最新的编程语言排名&#xff0c;令人瞩目的是&#xff0c;Go语言已经跃升至历史最高位&#xff0c;位列排行榜第七名&#xff0c;并且Go语言是前十榜单中最年轻的编程语言。这一成绩不仅彰显了Go语…

java1.8 的 client runtime compiler和server runtime compiler

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

MySQL数据查询优化

MySQL调优是开发中必不可少的内容&#xff0c;以下是对MySQL查询性能优化的部分总结 1. explain关键字的使用 explain关键字可以模拟优化器执行sql查询语句&#xff0c;获取sql的执行信息&#xff0c;使用方法&#xff1a; explainsql语句 1.1 字段详解 id&#xff08;select …

Linux---在Xshell上配置软件包管理器yum

一、什么是yum 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软…

练习题(2024/5/12)

1二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4…

解决vue3项目打包后部署后某些静态资源图片不加载问题

目录 问题 原因 解决方案 问题 开发完项目打包并部署 然后访问时发现导航栏背景图片没加载 打开浏览器控制台发现这张图片报错404 原因 可能是因为在部署后的服务器环境中对中文文件名的支持不完善。服务器在解析 URL 时可能无法正确识别或编码中文字符&#xff0c;导致无…

数据结构(四)——二叉树和堆(下)

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一、二叉树链式结构的实现总结 前言 这篇博客我们将来了解普通二叉树的实现和应用&#xff0c;对大家之前分治和递归的理解有所挑战。 一、二叉树链式结构的实现 1.前置说明 在学习二叉…

网络编程套接字详解

目录 1. 预备介绍 2.网络字节序 3.udp网络程序 4.地址转换函数 5.udp网络编程 1.预备介绍 1.1源IP地址和目标IP地址 举个例子: 从北京出发到上海旅游, 那么源IP地址就是北京, 目标IP地址就是上海. 1.2 端口号 作用: 标识一个进程, 告诉OS这个数据交给那个进程来处理; (1)…

爱分析基于杭州云器Lakehouse实现成本最优的一体化管理,新一代数据平台的建设方式

导读 1.当前&#xff0c;企业在大数据和数据中台建设上取得成果&#xff0c;但数据开发管理仍具挑战性&#xff08;成本、效率、复杂度&#xff09;。 2.随数据平台领域成熟&#xff0c;厂商应结合自身需求&#xff0c;重新思考“基于开源自建数据平台”的重资产模式与“购买…

【AMBA Bus ACE 总线 7.1 -- ACE Domains 介绍 2】

请阅读【AMBA Bus ACE 总线与Cache 专栏 】 欢迎学习:【嵌入式开发学习必备专栏】 文章目录 AxDOMAINAxDOMAIN[1:0]的值及含义AxDOMAIN 在ARM的AXI Coherency Extensions (ACE) 协议中,AxDOMAIN[1:0]是一个重要的信号字段,用于指示传输的域类型。这个字段影响了传输对系统…

Spring Boot支持发送邮件

GitHub&#xff1a;SpringBootDemo Gitee&#xff1a;SpringBootDemo 微信公众号&#xff1a; 通过Spring Boot整合邮件任务&#xff0c;支持发送邮件&#xff0c;可以实现服务故障时向指定邮箱发送邮件。 0 开发环境 JDK&#xff1a;1.8Spring Boot&#xff1a;2.7.18 1…

花了24小时做的采购、库存、进销存excel模板,真心好用,免费分享

花了24小时做的采购、库存、进销存excel模板&#xff0c;真心好用 在企业的日常运营中&#xff0c;进销存管理是一项至关重要的任务。它不仅涉及到商品的采购、销售和库存管理&#xff0c;还直接影响到企业的财务状况和市场竞争力。为了提高管理效率&#xff0c;许多企业选择使…

传感网应用开发教程--AT指令访问新大陆云平台(ESP8266模块+物联网云+TCP)

实现目标 1、熟悉AT指令 2、熟悉新大陆云平台新建项目 3、具体目标&#xff1a;&#xff08;1&#xff09;注册新大陆云平台&#xff1b;&#xff08;2&#xff09;新建一个联网方案为WIFI的项目&#xff1b;&#xff08;3&#xff09;ESP8266模块&#xff0c;通过AT指令访问…

经典笔试题:快速排序 计数排序

Problem: 912. 排序数组 思路 &#x1f468;‍&#x1f3eb; 三叶题解 &#x1f496; AC&#xff1a;计数排序 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) class Solution {public int[] sortArray(int[] nums) {int max -50001, min 50001;for (…

HCIP的学习(15)

第六章&#xff0c;BGP—边界网关协议 自治系统—AS ​ 定义&#xff1a;由一个单一的机构或组织所管理的一系列IP网络及其设备所构成的集合。 ​ AS的来源&#xff1a; 整个网络规模过大&#xff0c;会导致路由信息收敛速度过慢&#xff0c;设备对相同目标认知不同。AS之间…

MATLAB实现遗传算法优化选址-路径LRP问题(Location-Routing Problem)

MATLAB实现遗传算法优化选址-路径LRP问题(Location-Routing Problem) 一、模型 选址车辆路径问题&#xff08;Location-Routing Problem, LRP&#xff09;是一个组合优化问题&#xff0c;旨在同时优化设施位置的选择和车辆的配送路径。在这个问题中&#xff0c;我们考虑一个由…