【UnityRPG游戏制作】PureMVC框架嵌入面板示例

这篇具有很好参考价值的文章主要介绍了【UnityRPG游戏制作】PureMVC框架嵌入面板示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【UnityRPG游戏制作】PureMVC框架嵌入面板示例,# unity游戏demo制作,游戏,unity,PrueMVC,mvc,C#


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

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

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:Unity基础实战

⭐🅰️⭐




⭐前言⭐

【UnityRPG游戏制作】PureMVC框架嵌入面板示例,# unity游戏demo制作,游戏,unity,PrueMVC,mvc,C#


【UnityRPG游戏制作】PureMVC框架嵌入面板示例,# unity游戏demo制作,游戏,unity,PrueMVC,mvc,C#


🎶(1) 状态面板示例


【UnityRPG游戏制作】PureMVC框架嵌入面板示例,# unity游戏demo制作,游戏,unity,PrueMVC,mvc,C#

【UnityRPG游戏制作】PureMVC框架嵌入面板示例,# unity游戏demo制作,游戏,unity,PrueMVC,mvc,C#


Main

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

//-------------------------------
//-------功能:  主路口
//-------创建者:         -------
//------------------------------

public class Main : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        GameFacade.Instance.StartUp();
      
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}


PureNotification

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

//-------------------------------
//-------功能: 通用的通知名类
//-------创建者:         -------
//------------------------------

public class PureNotification 
{
    public const string SHOW_PANEL = "ShowPanel";         //显示面板的通知
    public const string HIDE_PANEL = "HidePanel";         //显示面板的通知
    //public const string BACKPACK_PANEL = "BackpackPanel"; //背包面板通知
    //public const string DEFEAT_PANEL = "DefeatPanel";     //失败面板通知
    //public const string GAME_PANEL   = "GamePanel";       //游戏面板通知
    //public const string NPCTIP_PANEL = "NPCTipPanel";     //NPC交互面板通知
    //public const string ROLE_PANEL   = "RolePanel";       //角色面板通知
    //public const string START_PANEL  = "StartPanel";      //开始面板通知
    //public const string STARTTIP_PANEL = "StartTipPanel"; //开始说明面板通知
    //public const string STATE_PANEL    = "StatetPanel";   //状态面板通知
    public const string UPDATA_ROLE_INFO  = "updataRoleInfo"; //角色信息更新通知
    public const string UPDATA_STATE_INFO = "playerProxy";//角色状态更新通知
    public const string START_UP = "startUp"; //启动通知
}


GameFacade

using PureMVC.Patterns.Facade;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//-------------------------------
//-------功能:  游戏外观
//-------创建者:         -------
//------------------------------


/// <summary>
/// 游戏外观
///1.继承PureMvc中Facade脚本
///2.为了方便使用Facade,需要自己写一个单例模式的属性
///3.初始化控制层相关的内容
///4.构造一个启动函数
/// </summary>
public class GameFacade : Facade
{
    //设置成单例模式
    public static GameFacade Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new GameFacade();
            }
            return instance as GameFacade;
        }
    }

    /// <summary>
    /// 3.初始化控制层相关的内容
    /// </summary>
    protected override void InitializeController()
    {
        base.InitializeController();
        //注册开始命令
        RegisterCommand(PureNotification.START_UP,()=>
        {
            return new StartCommand();     //里氏替换原则
        }
        );

        //注册显示面板的命令
        RegisterCommand(PureNotification.SHOW_PANEL, () =>
        {
            return new ShowPanelCommand();     //里氏替换原则
        }
        );

        //注册隐藏面板的命令
        RegisterCommand(PureNotification.HIDE_PANEL, () =>
        {
            return new HidePanelCommand();     //里氏替换原则
        }
        );
    }

    /// <summary>
    /// 启动函数
    /// </summary>
    public void StartUp() 
    {
        //发送启动的通知
        SendNotification(PureNotification.START_UP);
        SendNotification(PureNotification.SHOW_PANEL , "StatePanel");
    }

}


ShowPanelCommand

using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

//-------------------------------
//-------功能: 面板显示命令
//-------创建者:      
//------------------------------

public class ShowPanelCommand : SimpleCommand 
{
    /// <summary>
    /// 执行逻辑
    /// </summary>
    /// <param name="notification"></param>
    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管理器获取对应面板,然后与中介的ViewComponent界面视图同步关联
                    UIManager.GetInstance().ShowPanel<BackpackView>("BackpackPanel", (panelobj) => {
                        bm.ViewComponent = panelobj;
                        Debug.Log(bm.ViewComponent.ToString()); //打印对应的面板名字
                    });
                }
                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管理器获取对应面板,然后与中介的ViewComponent界面视图同步关联
                    UIManager.GetInstance().ShowPanel<DefeatView>("DefeatPanel", (panelobj) => {
                        dm.ViewComponent = panelobj;
                        Debug.Log(dm.ViewComponent.ToString()); //打印对应的面板名字
                    });
                }
                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管理器获取对应面板,然后与中介的ViewComponent界面视图同步关联
                    UIManager.GetInstance().ShowPanel<GameView>("GamePanel", (panelobj) => {
                        gm.ViewComponent = panelobj;
                        Debug.Log(gm.ViewComponent.ToString()); //打印对应的面板名字
                    });
                }
                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管理器获取对应面板,然后与中介的ViewComponent界面视图同步关联
                    UIManager.GetInstance().ShowPanel<NPCTipView>("NPCTipPanel", (panelobj) => {
                        nm.ViewComponent = panelobj;
                        Debug.Log(nm.ViewComponent.ToString()); //打印对应的面板名字
                    });
                }
                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管理器获取对应面板,然后与中介的ViewComponent界面视图同步关联
                    UIManager.GetInstance().ShowPanel<RoleView>("RolePanel", (panelobj) => {
                        rm.ViewComponent = panelobj;
                        Debug.Log(rm.ViewComponent.ToString()); //打印对应的面板名字
                    });
                }
                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管理器获取对应面板,然后与中介的ViewComponent界面视图同步关联
                    UIManager.GetInstance().ShowPanel<StartView>("StartPanel", (panelobj) => {
                        sm.ViewComponent = panelobj;
                        Debug.Log(sm.ViewComponent.ToString()); //打印对应的面板名字
                    });
                }
                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管理器获取对应面板,然后与中介的ViewComponent界面视图同步关联
                    UIManager.GetInstance().ShowPanel<StartTipView>("StartTipPanel", (panelobj) => {
                        stm.ViewComponent = panelobj;
                        Debug.Log(stm.ViewComponent.ToString()); //打印对应的面板名字
                    });
                }
                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管理器获取对应面板,然后与中介的ViewComponent界面视图同步关联
                     UIManager.GetInstance().ShowPanel<StateView>("StatePanel", (panelobj) => {
                     mm.setView(panelobj);        
                     Debug.Log(mm.ViewComponent.ToString()+"成功赋值"); //打印对应的面板名字
                    });
                }
              
                //实现面板之后,数据需要进行更新
                SendNotification(PureNotification.UPDATA_STATE_INFO ,Facade.RetrieveProxy(PlayerProxy.NAME).Data  );
                break;       
        }
    }
}

StateViewMediator

using PureMVC.Core;
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 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,

        };
    }

    /// <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>
    /// <param name="notification">通知</param>
    public override void HandleNotification(INotification notification)
    {
        switch (notification.Name)
        {
            case PureNotification.UPDATA_STATE_INFO:
             
                if (ViewComponent !=null)
                {
                    (ViewComponent as StateView).UpdateView(notification.Body as PlayerDataObj);

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

                }
                break;
        }
    }
}


🎶(1)


⭐🅰️⭐


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

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

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

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

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

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

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


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


【UnityRPG游戏制作】PureMVC框架嵌入面板示例,# unity游戏demo制作,游戏,unity,PrueMVC,mvc,C#文章来源地址https://www.toymoban.com/news/detail-861598.html


到了这里,关于【UnityRPG游戏制作】PureMVC框架嵌入面板示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【unity】快速了解游戏制作流程-制作九宫格简单游戏demo

            hi~大家好呀!欢迎来到我的unity学习笔记系列~,本篇我会简单的记录一下游戏流程并且简单上手一个通过九宫格移动到指定位置的小游戏,话不多说,我们直接开始吧~                  本篇源自我看B站一位up主的视频所做的笔记,感兴趣的可以去看原视频哦

    2023年04月08日
    浏览(57)
  • UNITY—2D游戏制作入门!

    Unity作为当今最流行的游戏引擎之一,受到各大厂商的喜爱。 像是炉石传说,以及逃离塔克夫,都是由unity引擎开发制作。 作为初学者的我们,虽然无法直接做出完成度那么高的作品,但每一个伟大的目标,都有一个微不足道的开始。让我们从一个2D小游戏入手,来学习Unit

    2024年02月04日
    浏览(56)
  • Unity游戏开始界面制作教学

    第一步: 新建一个Scene 第二步: 在Scene里添加一个Canvas对象(在Hierarchy右键–UI–Canavas) 如何给添加开始按钮: 在Canvas右键–UI–Button 如何给按钮添加文字: Button的子对象Text的Text组件可以修改按钮上的文字 如何给按钮添加事件: Button对象的Button组件最下面有一个“Oncl

    2024年02月02日
    浏览(43)
  • Unity制作 小球吃金币 游戏

    工程源文件下载地址-百度网盘 1. 新建一个项目 2. 新建一个平面对象 3. 新建一个材质球 为材质球设置颜色 5. 将材质球拖拽赋值给平面 6.  创建立方体对象,拉伸至平面宽度 7. 再复制三个立方体、调整位置、添加材质,用四个调整过的立方体将平面围起来 8. 创建一个球体(

    2024年01月15日
    浏览(48)
  • Unity和C#游戏编程入门:创建迷宫小球游戏示例

    💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 当涉及到Unity和C#游戏编程入门时,以下是一些示例代码,可以帮助初学者更好地理

    2024年02月08日
    浏览(41)
  • Unity学习之坦克游戏制作(1)开始场景的制作

    相当于开始界面,想怎么创建就怎么创建 我最终模拟的效果 这部分不关键,关键的是创建可用来装载脚本的button 这部分感兴趣的可以去看我博客的GUI部分,但建议大家把学GUI的时间拿来学UGUI 导入预设体 Root 创建一格Label组件作为标题 这部分也可以自己创建 同时创建四个按

    2024年01月22日
    浏览(51)
  • unity制作FPS射击游戏

    角色动作方面包括行走、奔跑、跳跃、武器切换、弹夹更换、武器展示、弹壳抛出效果、射击效果、全自动与半自动射击效果、瞄准效果、后坐力效果、弹痕效果等多种动作。 非玩家角色(NPC)具备多个动画状态,包括固定路径巡逻、行走、奔跑、寻路攻击等多种行为。 太

    2024年02月08日
    浏览(59)
  • unity——小球酷跑游戏制作

    所有变量与物体名的命名原则都是见名知意 一、创建一个unity项目 二、Create所需3Dobject 1.Player 2.walls 三、添加属性 : 1.添加在Player上 a.添加Rigidbody组件 b.添加new script组件,并命名为PlayMove,代码如下: 2.添加到walls上 a.首先create empty将wall包含 b.在Wall上添加new script组件,代码

    2023年04月24日
    浏览(39)
  • Unity游戏嵌入Android应用(融合为一个应用)

    嵌入项目的AndroidStudio版本和Unity版本 Unity2019 AndroidStudio2021 01 新建一个新的安卓项目 项目里新建一个button 实现button的点击事件进入游戏 unity导出android工程 导出的工程文件夹放入原生的安卓项目 放入如下代码 放入如下代码 放入如下代码 项目里添加UnityGameActivity.java 需要配置

    2023年04月08日
    浏览(36)
  • unity制作一款塔防游戏

    关键技术: 寻路系统 生成怪物算法 粒子系统 line renderer制作追踪射线 相机视角移动、放大 炮弹追踪算法 粒子特效 按钮动画制作 设置几个基准点,用于偏移方向 定义一个Move方法 判断当前行数是否超过位置数组的长度,如果是则直接返回 根据当前位置与目标位置计算出移

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包