Unity之基于MVC的UI框架-含案例

Unity之基于MVC的UI框架-含案例

使用案例:类《双人成行》3D动作益智冒险类双人控制游戏开发教程

资源地址:https://learn.u3d.cn/tutorial/3d-adventure-william-anna![](https://i-blog.csdnimg.cn/direct/7b6a161e367c40238a79ba70d9f16647.png)

一、MVC框架概览

本框架以MVC的方式搭建,以View视口的方式展现数据,以Controller处理应用逻辑,数据存储方面以Model存储数据模型。

1 " View "

也就是视图以UI视口的方式展现给用户,内容有view、Window、PopWindow、Toast(游戏中的吐丝效果)、TipDialog等等;

2 "Controller"

处理应用逻辑,对用户的输入进行响应,如点击按钮后的响应等等

3 "Model"

对应用中用到的业务模型

  • 流程设计图

三、 接口设计

【描述接口设计,在此详细说明,本章的接口是指引擎使用时的流程框架】

UIControllerManager

功能描述:界面管理类,对所有界面类型的组件进行控制(包括打开、切换、关闭等) 支持界面的静态加载、动态加载。界面的大部分操作都可以在这里调用。

  1. 方法名称: private void Init()

初始化所有的管理类,如View管理类,Window管理类,PopWindow管理类

  1. 方法名称: public void BaseRegisterView(System.Type type, string prefabPath)
    通过view的类型type和它所有的prefabPath注册指定的view
  2. 方法名称: public void BaseRegisterView(System.Type type, BaseViewController view)
    通过view的类型type和它所有的view注册指定的引用view
  3. 方法名称: public void BaseRegisterWindow(System.Type type, string prefabPath)
    通过Window的类型type和它所有的prefabPath注册指定的Window
  4. 方法名称: public void BaseRegisterWindow(System.Type type, BaseWindowController window)
    通过Window的类型type和它所有的Window注册指定的引用window
  5. 方法名称: public virtual void RegisterView()
    注册所有已经储存的View
  6. 方法名称: public virtual void RegisterWindow()
    注册所有已经储存的Window
  7. 方法名称: public void ChangeView(System.Type view, object param = null)

改变当前的激活的视口

  1. 方法名称: public BaseViewController GetCurrentView()
    取得当前激活的视口
  2. 方法名称: public void CloseView()
    关闭当前的视口
  3. 方法名称: public void ChangeWindow(System.Type window, object param = null, EChangeType type = EChangeType.ESWITCH)
    改变当前激活的窗口
  4. 方法名称: public BaseWindowController GetCurrentWindow()
    取得当前激活的窗口
  5. 方法名称: public void CloseWindow(System.Type window, params string[] param)

关闭当前的窗口

ViewControllerManager

同UIControllerManager

管理所有基于BaseViewController派生的View

WindowControllerManager

同UIControllerManager

管理所有基于BaseWindowController派生的Window

BaseViewController

View基类所有全屏界面归属于View,所有View的基类

  1. public abstract void OnEnterStart(GameObject parent = null, object param = null);

当进入View以前的开始前调用

  1. public virtual void OnEnterEnd()

当进入View以前的结束后调用

  1. public abstract object OnExitStart()

  2. public virtual void OnExitEnd()

  3. public virtual void ChangeView(System.Type view, object param = null)

BaseWindowController

四、 常用操作方法

派生自 BaseWindowController 的窗口类的注册和使用

两种方法

        1. 第一种方法

(1)首先新建你的Window类如"XXMainViewController"

(2)然后注册你的窗口类:

XXUIMainManager.Instance.BaseRegisterView(typeof(XXMainViewController), "Prefab/UI/View/XXMainViewController");

使用这种方法注册的类如XXMainViewController 将不能够出现在"Hierarchy"面版的对象"WindowControllerManager"下面

(3)然后就可以使用

"XXUIMainManager.Instance.ChangeView(typeof(xxMainViewController));"方法切换到这个Window。

        1. 第二种方法

(1)首先新建你的Window类如"XXLoginWindowController"

然后注册你的窗口类:

将"XXLoginWindowController"的prefab对象拖到"Yunji.WindowControllerManager"

对象下,并将对象处于隐藏状态;

(2)找到Canvas对象下的派生自"UIControllerManager"的组件如"XXUIMainManager",在它的属性"Windows"下增加"Size"值的大小,并将前面的"prefab对象"拖拽引用到其中的一个"Element"中。

(3)然后就可以使用

"XXUIMainManager.Instance.ChangeView(typeof(XXMainViewController));"方法切换到这个Window。

派生自 BaseWindowController 的窗口类之间的切换

派生自BaseViewController的视口类、派生自BaseTipDialogController的提示窗口类、派生自BasePopWindowController的弹出窗口类的注册和使用类似上一节的操作。

相关推荐
紫薯馍馍2 小时前
Adobe Photoshop 2025(Ps2025)下载安装教程
ui·adobe·photoshop
怣疯knight7 小时前
unity实现2D人物从上面踩踏敌人,敌人减血的简易方法(类似马里奥的攻击手段)
unity·游戏引擎
兰亭妙微8 小时前
2026年UX/UI五大趋势:AI、AR与包容性设计将重新定义用户体验
开发语言·ui·1024程序员节·界面设计·设计趋势
摘星编程12 小时前
【参赛心得】HarmonyOS创新赛获奖秘籍:如何用Stage模型和声明式UI打造高分作品
ui·华为·harmonyos·鸿蒙开发·stage模型
知识分享小能手1 天前
uni-app 入门学习教程,从入门到精通,uni-app中uCharts组件学习((8)
vue.js·学习·ui·微信小程序·小程序·uni-app·echarts
井队Tell2 天前
打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线(第五天)
学习·3d·unity
yi碗汤园2 天前
【一文了解】八大排序-插入排序、希尔排序
开发语言·算法·unity·c#·1024程序员节
极光雨雨2 天前
Java Spring MVC 中 WebMvcConfigurer 和 HandlerInterceptor之间的关系和用法案例
java·spring·mvc
Aevget2 天前
界面控件Kendo UI for Angular 2025 Q3亮点 - 全新的AI编码助手
ui·界面控件·kendo ui·ui开发·1024程序员节
future_studio2 天前
聊聊 Unity(小白专享、C# 小程序 之 联机对战)
unity·小程序·c#