MMORPG手游学习笔记——基于NGUI的UI框架雏形

一个MMOPRG游戏游戏流程主要是进入游戏之后进入初始界面,一般游戏公司会在这里挂上自己logo的图片或者一段动画以让玩家记住他们,然后进入游戏的登录界面,登录之后,进入真正的游戏界面。玩家可以在里面进行与NPC的互动,以及可以通过点击按钮,打开角色信息面板,角色装备面板,以及后面的关卡选择,关卡结算等等。在UI方面,为了防止每次多加一个窗口或者场景都需要加大量重复的代码,造成大量代码冗余,并且方便管理,提高代码的扩展性、复用性,所以需要一套系统的框架来进行管理。
框架的思想为,将通用的部分抽象出来,作为父类,提高复用性,避免每个脚本都有重复功能的代码。其次,将一些功能直接抽离出来,由单独的类进行封装,然后可以直接调用这个方法,提高效率。
UI框架主要分为五个部分,第一部分是以全局管理器为主的单例控制器,因为这些管理器是全局性,且是唯一的,所以都得是单例,因此抽象出一个单例类,作为他们的父类,然后因为场景切换时候,有些资源不用继续带到下个场景,所以需要继承IDisposabal接口,在每次在场景切换时,释放一些不必要的资源。
ResourcesMgr 资源加载管理器:主要用于加载场景中的所有资源,资源类型ResourceType主要包括场景UI,窗口UI,特效,角色和其他,通过资源类型,找到资源所在的位置,路劲为资源的名称,并判断是否加入内存(如果多次调用,就存放在哈希表里,不用每次加载的时候都需要直接在内存中再创建一次)。
SceneUIMgr 场景UI管理器:将ResourcesMgr 进一步封装,使得其通过枚举就能直接选择要加载的场景UI,并封装成函数。
WindowUIMgr 窗口UI管理器:也是将ResourcesMgr 进一步封装,并根据窗口类型枚举,加载具体的窗口UI,并根据窗口本身的挂点属性,找到其需要挂载节点的位置。然后封装几种打开,关闭窗口动画供选择。
SceneMgr 场景管理器:因为加载场景需要中间的加载场景做为过渡,所以需要确定加载场景之后的场景CurrentSceneType,然后封装几种加载到其他场景的方法
LayerUIMgr UI层级管理器:防止场景中UI因为层级问题而交叉在一起,在窗口打开时被调用,封装在WindowUIMgr的OpenWindow()方法里
在这里插入图片描述

第二第三部分分别是继承UI基类(UIBase)的窗口UI控制器(UIWindowBase)和场景UI控制器(UISceneBase),UIBase继承MOnoBeheavior
UIBase :是所有UI的基类,因为不论是场景UI还是窗口UI都可能有按钮,所以FindButton()在游戏开始渲染的时候,找到所有的按钮,并监听他们OnBtnClick()虚方法,具体怎么响应需要子类脚本具体实现。
UIWindowBase:所有窗口UI的基类 添加窗口的基本属性,窗口在场景上父节点的类型,窗口打开方式,当前窗口类型,以及下一个窗口类型确定场景(在切换窗口时需要用到)关闭窗口方法和关闭窗口之后需要执行的下一步操作的窗口摧毁之前执行的方法。
UISceneBase:所有场景UI的基类,仅需提供窗口UI的挂点位置。
UILogOnCtrl和UIRegCtrl:是窗口类的具体实现,主要功能为登录注册以及他们之间的切换,并重写UIBase的虚方法,实现按钮点击事件的具体功能,因为之前窗口该有的属性已经由父类UIWindowBase提供,所以这里只需选择窗口打开的方法,打开时间,通过WindowUIMgr窗口UI管理器的加载窗口的方法就可以实现窗口的打开以及窗口的切换。比如在登录界面点击注册,首先调用关闭登录界面,然后在窗口被关闭之后打开注册界面。
UISceneLogOnCtr:登录场景UI控制器,目前仅用于加载登录窗口,本身挂载在场景UI的根节点上,在游戏开始之后,开始加载登录窗口,因为希望登录加载动画更直观,所以需要协程等待两秒后再加载
UISceneLoadingCtrl: 加载场景UI控制器,主要负责添加进度条上的数值以及长度属性,并封装进度条的值的方法。
UISceneCityCtrl :主城场景UI控制器,目前主要是重写UI上按钮点击响应事件,以及打开角色信息窗口的方法。

在这里插入图片描述
第四部分为场景控制器,在一开始就挂载在场景里,负责将UI资源,角色资源加载出来。
一般来说场景控制器负责场景内的一切事务,就目前而言场景控制器主要是负责加载场景UI控制器,以及一些其他的具体功能。
比如初始场景控制器需要加载到登录场景,加载场景需要加载场景UI控制器,控制过场动画播放,并且异步加载其他场景,在要加载的场景完成加载后,切换到该场景,登录场景控制器和城镇场景控制器仅需加载该场景的场景UI控制就可以了。

在这里插入图片描述

第五部分为一些全局变量和枚举,方便调用。
在这里插入图片描述

总的来说:场景控制器>场景UI控制器>窗口UI控制器,即一开始场景中仅存在场景控制器,然后场景控制器加载场景UI控制器,场景UI控制器加载窗口UI控制器,且其中加载方法由几个单例控制器完成,但是具体用什么方法实现由场景UI控制器和窗口UI管理器决定。

UML类图下载链接:https://download.csdn.net/download/qq_27535197/10711716

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值