前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity3D-框架设计MVC

Unity3D-框架设计MVC

作者头像
孙寅
发布2020-06-02 11:51:52
9491
发布2020-06-02 11:51:52
举报
文章被收录于专栏:宜达数字

作为一个大型游戏,不可避免需要使用复杂的界面、网络消息处理、数据缓存等一些略微复杂的东西。其实我们都知道,对于一个手游来说,庞大的系统工程下面,其实是大量基础的技术的堆叠。于是在游戏开发中,出现各类的Bug其实并不是因为技术上的实现出现问题,而是从框架、代码的管理上出现设计失误。

针对以上问题,众多软件设计者做出努力,设计出了很多中逻辑清晰的框架模式结构,这里我介绍在我们项目中使用的MVC设计模式。

MVC的概念

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

为什么在Unity3d中使用MVC?

这里我们有一个登录界面(gif图请耐心等待加载),我们点击登录之后,需要网络发包到服务器。服务器收到数据包之后,进行帐号密码对比。然后返回数据到客户端,然后客户端弹出提示框提示登录结果。

[图片上传失败...(image-67433e-1539180638206)]

单一逻辑的客户端模式

从逻辑简单的层面来讲,我们可以按照下面的方案来做。

单一逻辑的客户端模式,网络逻辑 和 UI事件都放在UI 逻辑处理类中进行处理。

针对上面的登录逻辑,我们有以下 Class

LoginWindow — 负责处理界面点击、滑动、输入事件 及 注册网络回调、处理网络消息。

CCNetworkClient — 负责Send 、Receive 网络数据 及 网络数据分发。

在简单的工程中,这种框架方案无意最适合,省时省力,一眼就看懂。

但是在大型游戏和工程中,代码量太大,用单一逻辑的客户端模式,管理起来力不从心,不好维护。于是我们引入MVC模式

Unity3d 中的MVC框架模式

在Unity3d中,由Model 通知 View 的方式可以有两种,使用SendMessage 和 使用Delegate 。从而引出了标题中的基于网络使用SendMessage 及 基于网络使用Delegate的客户端MVC框架模式。

对于MVC框架模式,我们有以下Class

LoginWindow — 负责UI 界面 Event 发出已经 View的更新。

LoginModel — 负责注册网络回调,处理网络消息。

CCNetworkClient — 负责Send 、Receive 网络数据 及 网络数据分发。

基于网络使用SendMessage的客户端MVC模式

在接收到网络数据 (ReceiveNetworkPacket ) 之后,Network(Client) 进行数据分发 ProcessNetworkEvent 。进而处理之前Model 中注册的网络事件 (RegisterNetworkEvent )。

如果需要更新 UI ,通过gameObject.SendMessage 来通知 UI 更新。

基于网络使用Delegate的客户端MVC框架模式

对于一款ARPG游戏来说,游戏的流畅度在一定程度上决定了工作室收入。运行速度上的优化不仅要从内存、CPU、GPU上,对自己的逻辑编码、图集使用等去分析,对Unity系统API的选择也要进行优化考虑。

GameObject.SendMessage() 是一个效率较低的API,我们使用 Delegate 替换掉它。引入Delegate 。

在Model发送网络数据时,把注册的UIEvent 也发送到服务器。服务器原样返回 。

在Model 接收到数据需要更新 UI 界面时,使用 之前 注册的UIEventDelegate 来进行更新。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MVC的概念
  • 为什么在Unity3d中使用MVC?
    • 单一逻辑的客户端模式
    • Unity3d 中的MVC框架模式
      • 基于网络使用SendMessage的客户端MVC模式
        • 基于网络使用Delegate的客户端MVC框架模式
        相关产品与服务
        云联网
        云联网(Cloud Connect Network,CCN)提供全网互联服务,助力您实现各地域的云上、云下多点互联。云联网的智能调度、路由学习等特性,可帮助您构建极速、稳定、经济的全网互联,轻松满足在线教育、游戏加速、混合云等全网互联场景下的极速体验。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档