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

在这里插入图片描述


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

👨‍💻 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#专题篇】—核心章题单实践练习


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


在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis系列-3 Redis缓存问题

1.缓存的作用 数据库(如Mysql)的持久化特点带来了较低的性能&#xff0c;高并发的场景下&#xff0c;连接池很快被耗尽而出现宕机或DOS&#xff0c;无法继续对外提供服务。相对于数据库的硬盘IO&#xff0c;缓存中间件基于内存进行读写&#xff0c;从而具备较大的吞吐量和高并…

5.10.6 用于乳腺癌超声图像分类的Vision Transformer

医学超声&#xff08;US&#xff09;成像由于其易用性、低成本和安全性已成为乳腺癌成像的主要方式。卷积神经网络&#xff08;CNN&#xff09;有限的局部感受野限制了他们学习全局上下文信息的能力。利用 ViT 对使用不同增强策略的乳房 US 图像进行分类。 卷积神经网络&#…

你知道C++多少——默认成员函数

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…

Linux中gitlab-runner部署使用备忘

环境&#xff1a; 操作系统:&#xff1a;CentOS8 gitlab版本&#xff1a;13.11.4 查看gitlab-runner版本 可以从https://packages.gitlab.com/app/runner/gitlab-runner/search找到与安装的gitlab版本相近的gitlab-runner版本以及安装命令等信息&#xff0c;我找到与13.11.4相…

网络 | 应用层-websocket协议概述与握手过程解析

背景&#xff1a;这里为了实现消息实时传输决定引入websocket协议。 不管是发送消息还是接收消息&#xff0c;都需要实时传输&#xff0c;张三发给李四&#xff0c;李四立马就能收到&#xff0c;基于HTTP实现是有些困难的。 但轮询方式也带来了一些问题 1、消耗更多系统资源&…

设计模式——模板设计模式(Template Method)

模板设计-base 什么是模板&#xff1f; 举个简单的例子&#xff0c;以AABB的格式&#xff0c;写出一个词语&#xff0c;你可能会想到&#xff0c;明明白白&#xff0c;干干净净等&#xff0c; 这个AABB就是一个模板&#xff0c;对模板心中有了一个清晰的概念之后&#xff0c;…

draw.text((left, top - 15), text,font=font, fill=“green”)

这是一个Python PIL库中的方法&#xff0c;用于在图片上绘制文本。具体来说&#xff0c;它可以在指定的位置绘制指定的文本&#xff0c;并使用指定的字体、颜色等参数进行渲染。其中&#xff0c;left和top是文本绘制的左上角坐标&#xff0c;text是要绘制的文本内容&#xff0c…

揭秘高效引流获客的艺术:转化技巧大公开

在数字化营销的海洋中&#xff0c;每个企业都如同一艘努力航行的船&#xff0c;而流量便是推动船只前行的风帆。如何有效吸引并获取潜在客户&#xff0c;即所谓的“引流获客”&#xff0c;已成为企业市场营销策略中不可或缺的一环。本文将详细探讨几种实用且高效的引流获客技巧…

Vue从入门到实战Day04

一、组件的三大组成部分&#xff08;结构/样式/逻辑&#xff09; 1. scoped样式冲突 默认情况&#xff1a;写在组件中的样式会全局生效 -> 因此很容易造成多个组件之间的样式冲突问题。 1. 全局样式&#xff1a;默认组件中的样式会作用到全局 2. 局部样式&#xff1a;可以…

0X JavaSE-- UML、

# Unified Modeling Language UML 统一建模语言 UML 是一种图形化的语言。 UML 不是专门为 Java 准备的。 只要是面向对象的编程语言&#xff0c;开发前的设计&#xff0c;都需要画 UML 图进行系统设计。 最常用的四个 UML 图是 类图&#xff08;Class Diagram&#xff09;&…

微信小程序踩坑,skyline模式下,简易双向绑定无效

工具版本 基础库版本 Skline模式 页面json设置 问题描述 skyline模式下,textarea,input标签设置简易双向绑定 model:value是无效的,关闭skyline模式就正常使用了 截图展示 这里只展示了textarea标签,input标签的简易双向绑定也是无效的 总结 我在文档里面是没找到skyline里面不…

考研踩坑经验分享

文章目录 写在前面自身情况简介自身学习路线优点坑点 学习路线建议1、2和3月份3、4和5月份6、7和8月份9、10月份11、12月份 一些私货建议结尾 写在前面 考研是一件非常有盼头的事&#xff0c;但绝对不是一件容易的事。 如果你不能做好来年三月份出成绩时&#xff0c;坦然接受…

英语复习之英语形近词总结(四)

英语形近词总结复习第四部分&#xff1a; 单词 释义例句 genuine 英 /ˈdʒenjuɪn/ 美 /ˈdʒenjuɪn/ adj.真实的&#xff0c;真正的&#xff1b;诚恳的 1.Only genuine refugees can apply for asylum. 只有真正的难民才能申请政治避难。 《牛津词典》 2.This isnt a genui…

Leaflet.canvaslabel在Ajax异步请求时bindPopup无效的解决办法

目录 前言 一、场景重现 1、遇到问题的代码 2、问题排查 二、通过实验验证猜想 1、排查LayerGroup和FeatureGroup 2、排查Leaflet.canvaslabel.js 三、柳暗花明又一村 1、点聚类的办法 2、歪打正着 总结 前言 在上一篇博客中介绍了基于SpringBoot的全国风景区WebGIS按…

扑克游戏程序代码,使用QT,C++ (price 600 不包含文档)

wx:help-assignment code price: 600 &#xff08;不包含文档&#xff01;不包含文档&#xff01;不包含文档&#xff01;&#xff09; 扑克游戏程序代码&#xff0c;使用QT&#xff0c;C 1.作业的目的是 在这个作业中&#xff0c;你将得到一组要求&#xff0c;使用本模块中涵…

java项目之英语知识应用网站源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的英语知识应用网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 英语知识应用网站的主要…

kafka安装及收发消息

kafka需要与zookeeper配合使用&#xff0c;但是从2.8版本kafka引入kraft&#xff0c;也就是说在2.8后&#xff0c;zookeeper和kraft都可以管理kafka集群&#xff0c;这里我们依然采用zookeeper来配合kafka。 1、首先我们下载zookeeper 下载地址为 https://zookeeper.apache.org…

macOS12安装 php8.1和apache

1. 安装php 8.1 macOS12不再自带php brew tap shivammathur/php 查看可安装版本 brew search php 安装指定版本 brew install php8.1 环境配置 vim ~/.zshrc export PATH"/usr/local/opt/php8.1/bin:$PATH" export PATH"/usr/local/opt/php8.1/sbin:$PAT…

《工具分享-整合功能网页》标星5.3k⭐开发人员的在线工具集:it-tools

IT Tools - 为方便开发人员提供的在线工具 部署自己的it-tools: 有两个版本&#xff0c;目前有中文支持。 直接部署使用docker指令获取出来的是英文的&#xff1a; 英文版&#xff1a; docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-…

第81天: 代码审计-PHP 项目MVC 注入CNVD 拿 1daySQL监控动态调试

目录 前置知识 正则表达式挖掘思路(通用漏洞思路) 功能点挖掘思路(通用漏洞思路) 案例一&#xff1a;数据库监控-QQ 业务源码系统-(无过滤) 案例二&#xff1a;正则表达式-Bluecms 源码系统-(无过滤) 案例三&#xff1a; CNVD 拿 1DAY-梦想 CMS 源码系统-(有过滤) 梦想 …