👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:就业宝典
⭐🅰️推荐专栏⭐
⭐-软件设计师高频考点大全⭐
文章目录
- ⭐前言⭐
- 🎶(==四==) 玩法相关
- (==1==) 面板显隐命令
- (==2==) 玩家升级命令
- (==3==) 玩家受伤命令
- (==4==) 经验升级命令
- (==5==) 武器和伤害命令
- ⭐🅰️⭐
⭐前言⭐
🎶(四) 玩法相关
(1) 面板显隐命令
- PUREMVC框架
using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------
//-------功能: 面板隐藏命令
//-------创建者:
//------------------------------
public class HidePanelCommand : SimpleCommand
{
public override void Execute(INotification notification)
{
base.Execute(notification);
Debug.Log("隐藏面板的命令开始执行");
string panelName = notification.Body.ToString();
//Debug.Log(panelName);
SelectPanel(panelName);
}
/// <summary>
/// 封装选择需要执行的面板
/// </summary>
/// <param name="panelName"></param>
private void SelectPanel(string panelName)
{
//面板命令的选择
switch (panelName)
{
case "BackpackPanel":
Debug.Log("命令为BackpackPanel");
if (!Facade.HasMediator(BackpackViewMediator.NAME)) //首先判断是否有该中介,没有就new一个
{
Facade.RegisterMediator(new BackpackViewMediator()); //注册该视图中介
}
//获取视图对应的中介
BackpackViewMediator bm = Facade.RetrieveMediator(BackpackViewMediator.NAME) as BackpackViewMediator;
if (bm.ViewComponent != null) //当对应的视图中介有关联界面面板时
{
//通过UI管理器隐藏面板
UIManager.GetInstance().HidePanel("BackpackPanel");
}
break;
case "DefeatPanel":
Debug.Log("命令为DefeatPanel");
if (!Facade.HasMediator(DefeatViewMediator.NAME)) //首先判断是否有该中介,没有就new一个
{
Facade.RegisterMediator(new DefeatViewMediator()); //注册该视图中介
}
//获取视图对应的中介
DefeatViewMediator dm = Facade.RetrieveMediator(DefeatViewMediator.NAME) as DefeatViewMediator;
if (dm.ViewComponent != null) //当对应的视图中介有关联界面面板时
{
//通过UI管理器隐藏面板
UIManager.GetInstance().HidePanel("DefeatPanel");
}
break;
case "GamePanel":
Debug.Log("GamePanel");
if (!Facade.HasMediator(GameViewMediator.NAME)) //首先判断是否有该中介,没有就new一个
{
Facade.RegisterMediator(new GameViewMediator()); //注册该视图中介
}
//获取视图对应的中介
GameViewMediator gm = Facade.RetrieveMediator(GameViewMediator.NAME) as GameViewMediator;
if (gm.ViewComponent != null) //当对应的视图中介有关联界面面板时
{
//通过UI管理器隐藏面板
UIManager.GetInstance().HidePanel("GamePanel");
}
break;
case "NPCTipPanel":
Debug.Log("NPCTipPanel");
if (!Facade.HasMediator(NPCTipViewMediator.NAME)) //首先判断是否有该中介,没有就new一个
{
Facade.RegisterMediator(new NPCTipViewMediator()); //注册该视图中介
}
//获取视图对应的中介
NPCTipViewMediator nm = Facade.RetrieveMediator(NPCTipViewMediator.NAME) as NPCTipViewMediator;
if (nm.ViewComponent != null) //当对应的视图中介有关联界面面板时
{
//通过UI管理器隐藏面板
UIManager.GetInstance().HidePanel("NPCTipPanel");
}
break;
case "RolePanel":
Debug.Log("命令为RolePanel");
if (!Facade.HasMediator(RoleViewMediator.NAME)) //首先判断是否有该中介,没有就new一个
{
Facade.RegisterMediator(new RoleViewMediator()); //注册该视图中介
}
//获取视图对应的中介
RoleViewMediator rm = Facade.RetrieveMediator(RoleViewMediator.NAME) as RoleViewMediator;
if (rm.ViewComponent != null) //当对应的视图中介有关联界面面板时
{
//通过UI管理器隐藏面板
UIManager.GetInstance().HidePanel("RolePanel");
}
break;
case "StartPanel":
Debug.Log("StartPanel");
if (!Facade.HasMediator(StartViewMediator.NAME)) //首先判断是否有该中介,没有就new一个
{
Facade.RegisterMediator(new StartViewMediator()); //注册该视图中介
}
//获取视图对应的中介
StartViewMediator sm = Facade.RetrieveMediator(StartViewMediator.NAME) as StartViewMediator;
if (sm.ViewComponent != null) //当对应的视图中介有关联界面面板时
{
//通过UI管理器隐藏面板
UIManager.GetInstance().HidePanel("StartPanel");
}
break;
case "StartTipPanel":
Debug.Log("StartTipPanel");
if (!Facade.HasMediator(StartTipViewMediator.NAME)) //首先判断是否有该中介,没有就new一个
{
Facade.RegisterMediator(new StartTipViewMediator()); //注册该视图中介
}
//获取视图对应的中介
StartTipViewMediator stm = Facade.RetrieveMediator(StartTipViewMediator.NAME) as StartTipViewMediator;
if (stm.ViewComponent != null) //当对应的视图中介有关联界面面板时
{
//通过UI管理器隐藏面板
UIManager.GetInstance().HidePanel("StartTipPanel");
}
break;
case "StatePanel":
Debug.Log("命令为StatePanel");
if (!Facade.HasMediator(StateViewMediator.NAME)) //首先判断是否有该中介,没有就new一个
{
Facade.RegisterMediator(new StateViewMediator()); //注册该视图中介
}
//获取视图对应的中介
StateViewMediator mm = Facade.RetrieveMediator(StateViewMediator.NAME) as StateViewMediator;
if (mm.ViewComponent != null) //当对应的视图中介有关联界面面板时
{
//通过UI管理器隐藏面板
UIManager.GetInstance().HidePanel("StatePanel");
}
break;
}
}
}
(2) 玩家升级命令
using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------
//-------功能: 玩家升级通知
//-------创建者:
//------------------------------
public class LevelUpCommand : SimpleCommand
{
public override void Execute(INotification notification)
{
base.Execute(notification);
PlayerProxy playerProxy = Facade.RetrieveProxy(PlayerProxy.NAME) as PlayerProxy ;
if (playerProxy != null)
{
playerProxy.LevUp (); //自己将数据升级
playerProxy.SavaUp(); //数据保存
SendNotification(PureNotification.UPDATA_ROLE_INFO, playerProxy.Data as PlayerDataObj) ; //发送角色信息更新通知
}
}
}
(3) 玩家受伤命令
- 血条减少,玩家数据更新
- 观察者模式
using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------
//-------功能: 受伤命令
//-------创建者: -------
//------------------------------
public class HurtCommand : SimpleCommand
{
public override void Execute(INotification notification)
{
base.Execute(notification);
Debug.Log("玩家受伤的命令开始执行");
PlayerProxy playerProxy = Facade.RetrieveProxy(PlayerProxy.NAME) as PlayerProxy;
if (playerProxy != null)
{
playerProxy.LevUp(); //自己将数据升级
playerProxy.SavaUp(); //数据保存
SendNotification(PureNotification.UPDATA_ROLE_INFO, playerProxy.Data as PlayerDataObj); //发送角色信息更新通知
SendNotification(PureNotification.PLAYER_INJURY, notification.Body);
}
}
}
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
};
}
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);
else {Debug.Log("为空"); }
break;
}
}
/// <summary>
/// 可选:重写注册方法(他们需要到Facde中注册)
/// </summary>
public override void OnRegister()
{
base.OnRegister();
}
}
(4) 经验升级命令
using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------
//-------功能: 經驗更新命令-------
//-------创建者: -------
//------------------------------
public class EXPUpCommand : SimpleCommand
{
public override void Execute(INotification notification)
{
base.Execute(notification);
SendNotification(PureNotification.UPDATA_EXP ,notification .Body); //发送更新经验血条的通知
}
}
using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------
//-------功能:玩家升级通知
//-------创建者:
//------------------------------
public class LevelUpCommand : SimpleCommand
{
public override void Execute(INotification notification)
{
base.Execute(notification);
PlayerProxy playerProxy = Facade.RetrieveProxy(PlayerProxy.NAME) as PlayerProxy ;
if (playerProxy != null)
{
playerProxy.LevUp (); //自己将数据升级
playerProxy.SavaUp(); //数据保存
SendNotification(PureNotification.UPDATA_ROLE_INFO, playerProxy.Data as PlayerDataObj) ; //发送角色信息更新通知
}
}
}
(5) 武器和伤害命令
using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------
//-------功能:更换武器图标的命令
//-------创建者: -------
//------------------------------
public class WeaponUpCommand : SimpleCommand
{
public override void Execute(INotification notification)
{
base.Execute(notification);
//先将玩家数据中更新武器信息
PlayerDataObj playerProxy = Facade.RetrieveProxy(PlayerProxy.NAME).Data as PlayerDataObj ;
playerProxy.nowItem = notification.Body as Sprite;
//playerProxy.item[playerProxy.index] = notification.Body as Sprite;
//到时打开role面板时会自动更新数据
// (playerProxy.Data as PlayerDataObj).nowItem = notification.Body as Sprite;
//而后发送武器更新的通知——目的是更新State面板中的武器信息
SendNotification(PureNotification.UPDATA_WEAPON_INFO2, notification.Body );
}
}
using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------
//-------功能: 受伤命令
//-------创建者: -------
//------------------------------
public class HurtCommand : SimpleCommand
{
public override void Execute(INotification notification)
{
base.Execute(notification);
Debug.Log("玩家受伤的命令开始执行");
PlayerProxy playerProxy = Facade.RetrieveProxy(PlayerProxy.NAME) as PlayerProxy;
if (playerProxy != null)
{
//playerProxy.LevUp(); //自己将数据升级
// playerProxy.SavaUp(); //数据保存
SendNotification(PureNotification.UPDATA_ROLE_INFO, playerProxy.Data as PlayerDataObj); //发送角色信息更新通知
SendNotification(PureNotification.PLAYER_INJURY, notification.Body);
}
}
}
⭐🅰️⭐
⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、