[Unity3D热更框架] LuaMVC简介

1.什么是LuaMVC

  从工作以来一直从事工业三维仿真软件/AR软件的开发,每个项目开发周期短,项目从Demo到完(huang)结(le)时间较为紧凑,因此需要一个便捷的开发框架作为支撑,以适应不同的项目需求,而且需要尽可能覆盖多个终端( web/android/ipad)的需求。

  LuaMVC是根据以上需求基于PureMVC框架和XLua热更新解决方案开发的支持热更的MVC框架,框架继承了pureMVC框架的编码方式,包括lua部分代码也继承了View/Mediator,Model/Proxy,Command/Controller的方式,LuaMVC新增了Service/Hadnler模块,以更好的适应与远程服务器的交互,同样继承了XLua的热补丁功能。LuaMVC还提供了Unity3D中AssetBundle资源更新的解决方案,Lua脚本自动更新等其他基础工具。下面来详细了解一下LuaMVC吧!

1.1 什么是Lua

学术解释

  Lua设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。[1.百度百科Lua]

  Lua的目标是成为一个很容易嵌入其它语言中使用的语言。很多应用程序使用Lua作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。[2.维基百科Lua]

Lua官方的解释。[3.Lua官网]

简单解释

  因为Lua可即时编译的特性使得Unity3D可以在运行时动态地加载Lua进来并执行Lua代码中的代码。也就是说如果业务逻辑是Lua写的,那么Unity3D的程序就不需要重新Build项目和部署项目,只需要将新的Lua文件(在Unity3D开发中通常是.txt文件)导入客户端中即可。

  我们的Lua代码该如何被C#代码所调用呢?XLua为我们提供了这样的环境。

1.1.1 什么是XLua

  xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。(xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc.) 更多XLua的详细内容查考[4.XLua Github]

1.1.2 其他热更新解决方案介绍

  过于严谨的效率不在我们这篇文章的考虑范围之内,目前较为熟知的热更新解决方案还有:

  • slua: github中也提供围绕slua的众多的框架,其中mr-kelly/KSFramework是最为完善的一个。官方解释:KSFramework是一个整合KEngine、SLua(或XLua、ILRuntime)的Unity 5 Asset Bundle开发框架,并为程序、美术、策划、运营提供辅助工具集。
  • ulua/tolua,LuaFramework是基于SimpleFramework + tolua #基础上,重新构造的新框架~
    框架自带了LuaBundle模式(直接讲lua文件打进Assetbundle)+ 重构的资源管理器。
  • ILRuntime,ILRuntime项目为基于C#的平台(例如Unity)提供了一个纯C#实现,快速、方便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新
  • JavaScript Binding 在线文档 JSBinding一个可以让你用javascript脚本编写unity3d逻辑的工具。

1.1.3 为什么采用XLua

  虽然从诸多Lua热更新解决方案的性能对比文章中对比得知XLua并非是性能最好的解决方案,但是我依旧决定采用XLua是因为以下原因:

  • 腾讯大厂开源,持续稳定的更新
  • XLua的热补丁,热补丁可以在某一段C#代码中注入Lua代码,执行完Lua代码之后继续执行C#代码的能力,这样意味着平时的开发可以用C#,效率/性能都得到保证
  • 出色的GC优化
  • 最重要的原因!!!上手比最流行的ulua更容易

Lua性能对比文章供大家参考

Unity项目常见Lua解决方案性能比较

Unity中SLua、Tolua、XLua和ILRuntime效率评测

1.2 什么是MVC

  MVC不是一种技术,仅是一种理念。MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。

  • 控制器(Controller)- 负责转发请求,对请求进行处理。
  • 视图(View) - 界面设计人员进行图形界面设计。
  • 模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。
  • MVC结构图MVC结构图

  • 一个最简单的MVC案例(javascript实现)

/** 模拟 Model, View, Controller */
var M = {}, V = {}, C = {};/** Model 负责存储数据 */
M.data = "hello world";/** View 负责显示数据 */
V.render = (M) => { console.log(M.data); }/** Controller 作为Model和View之间数据传输的中间者 */
C.handleOnload = () => { V.render(M); }/** 执行渲染请求 */
window.onload = C.handleOnload;

1.2.1 什么是pureMVC

  如果你对pureMVC(标准版)不了解,可以先浏览一下以下两篇博客:(多核版本可自行google学习)

  • pureMVC框架解读(上)
  • pureMVC框架解读(下)

   维基百科中这样解释:
  The Model, View and Controller application tiers are represented by three Singletons (a class of which only one instance may be created).
The MVC Singletons maintain named caches of Proxies, Mediators and Commands, respectively. The Facade, also a Singleton, provides a single interface for communications throughout the application. These four Singletons are referred to as the Core Actors.

  • Data objects, be they local or remote, are managed by Proxies.
  • The View Components that make up the User Interface are managed by Mediators.
  • Commands may interact with Proxies, Mediators, as well as trigger or execute other Commands.

1.2.2 为什么采用pureMVC

  对Unity3D框架有所了 解的人都知道有[5.strangeIOC](StrangeIOC 是一个轻量的高扩展性的控制反转框架,专为C#和Unity而设计),而且StrangeIOC使用的人数也更多一些,结合我体验过StrangeIOC的感受来说一下为什么采用pureMVC

  • pureMVC设计和思路相比StrangeIOC来说更为简单,更容易在多人项目中推进
  • 用pureMVC的思路将XLua热更新解决方案继承到框架中更为简单

  至于pureMVC的缺点我们下面再分析。

2.LuaMVC框架的优势与缺陷

2.1 先谈优势

  • 优化了pureMVC(标准版)中每次Notification都会调用反射执行已注册事件的严重缺点
  • 优化了pureMVC.Mediator中对View(视图)操作反复拆装箱的操作
  • LuaMVC框架用C#编码和lua编码风格完全一致
  • 对计算性能要求较高的模块(战斗模块)或者是不易变动的模块可全用C#进行开发,对将来可能需要热更的模块采用lua编写
  • 利用pureMVC事件通知的特性,可方便新增/更新功能C#编写的功能
  • xlua的热补丁功能,可只再修复bug时利用lua,其余全用C#编码(这个功能的使用有待思考,因为需要有预见性地在C#代码种标注Hotfix标签)
  • LuaMVC也提供了AssetBundle解决方案(官方[6.AssetbundleManager]的分支版本)
  • 架构逻辑简单,弄清框架逻辑流程相对容易
  • 多人开发容易推广
  • ……

2.2 再谈缺陷

  对于LuaMVC缺陷我有最深的体会,从最初模仿pureMVC的springMVC框架到pureMVC再到LuaMVC,流程控制可能是LuaMVC框架最致命的缺点,因此也限制了它的使用范畴,但是如果你能够合理的规划通知的名称和业务流程的合理规划,这也不将成为什么问题。

  • 流程控制,流程交互依靠Notification(事件通知),事件需要拟定一个string类型作为事件的名称,在随着项目庞大起来,很多个事件的不合理命名可能会让你觉得事件流程特别难以控制,特别是新的程序员加入这个项目中时。但是IDE的升级和事件名称合理的命名可以解决这个问题,多写几个项目就知道该规避这一问题。
  • 代码数量多,每个模块都要生成View/Mediator,Model/Proxy,Service/Handler甚至Command

2.3 LuaMVC只是一种解决方案的思路

  LuaMVC中的pureMVC可能不符合你的预期,你可以把pureMVC框架置换成strangeIOC或者自己的框架。如果你觉得LuaMVC中XLua不符合你对lua性能的需求,XLua也可以用uLua/toLua来代替。

  LuaMVC是我工作经验的总结,可能并不适合每一个项目,开源目的:

  • 总结经验
  • 开源更有利于进步
  • 为初入Unity3D的新手提供一个对框架的初步认知

3.LuaMVC适合什么样的应用场景

  经过分析LuaMVC的优势与缺陷,LuaMVC能不能经得起较为庞大项目的考验尚不明确,但是可以很稳定适用于一下项目:

  • VR/AR展示软件
  • 工业三维仿真软件
  • 休闲娱乐游戏(同步率不高的游戏,高同步的尚不明确)
  • 项目demo

4.LuaMVC内容简述

  LuaMVC提供基于pureMVC+XLua的核心事件交互机制及热更的方案之外,还提供了诸多的工具类,辅助项目/游戏的开发。后续我们依次讲解

框架核心

  • 第一篇:PureMVC详解,介绍PureMVC中涉及的C#语法特性和所涉及的设计模式,并改进pureMVC标准版中在C#中因反射而造成的性能瓶颈,并拓展MVC为MVCS框架,增加PureMVC与远程服务器的交互能力。
  • 第二篇:Lua的简介与XLua的简介,学会XLua使用方式,以及如何在Lua中实现面向对象的编程方式。
  • 第三篇:Lua与C#混编的思考,Lua应该占据代码中多大的比例,以及在使用LuaMVC时我们应该注意什么。
  • 第四篇:ViewMaster详解,如何将UI框架构建到LuaMVC原型中,如何让LuaMVC自动管理所有View,ViewMaster的功能设计与使用。

框架核心工具

  • 第五篇:AssetBundle工具的构建,AssetBundle包含了哪些功能,在使用AssetBundle打包资源时应该注意哪些事项以及如何优化已有的项目资源。
  • 第六篇:LuaMVCConfig配置工具,为什么我们需要为LuaMVC提供一个配置工具,以及它具体包含了什么内容。

框架基础工具

  • 第七篇:对象池详解,对象池在Unity3D使用的意义,如何构建一个适合自己的对象池。
  • 第八篇:线程池详解,为什么要使用线程池,刨析Unity3D的多线程编程。
  • 第九篇:TimeMaster事件工具详解,在游戏/项目中时间总是一个很重要的概念,TimeMaster可以为我们提供什么样的功能,TimeMaster API详解。
  • 第十篇:Setting工具详解,如何在Unity3D运行时动态调节项目的参数,阴影设置,锯齿设置等。
  • 第十一篇:AudioEnty工具详解,为什么需要音频控制器,它应该包含什么样的功能。
  • 第十二篇:数据加密工具与密钥的生成管理。了解简单的加密算法与封装。
  • 第十三篇:基础辅助工具,配置文件读取,单例父类,协程工具等。

项目经验总结与合理规避

  • 第十四篇:代码优化/内存控制,项目路径问题等前期规避问题。
  • 第十五篇:关于Android/iOS开发环境配置与发布以及真机直连PC调试。

简述网络模块

  • 第十六篇:Pomelo框架简介与如何与LuaMVC建立联接,如何部署Pomelo到Linux,如何用NodeJS快速搭建并部署WebServer。

框架体验(案例)

  • 第十七篇:从零到一用LuaMVC快速开发小游戏。

关于LuaMVC框架

源码 : https://github.com/ll4080333/luaMVC
如果对你有用,记得点一波Star,关注博客哦。

  LuaMVC是我在项目种的经验总结,如果恰巧你也需要这样的框架来快速开发,那你可以期待后续的更新哦。
  如果你有什么更好的意见与建议欢迎加留言或者加群:LuaMVC/SpringGUI交流群 593906968 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25180.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一张图了解OpenGL的渲染架构

初学者在初学OpenGL时,很多时候会对OpenGL的渲染架构感到困惑,不清楚它是怎么一个渲染流程,常将Arributes直接传递到片元着色器,或者为了将属性直接传递到片元着色器,而通过uniform传递到片元着色器等,这样…

GacUI:跨平台和渲染器

GacUI:跨平台和渲染器 https://github.com/vczh/GacUIBlog UI库跨平台的方法无非就是每个平台写一次。而如何把更多的共同点抽取出来,尽量的减少每个平台写一次的部分,是每一个跨平台的UI库的重点之一。GacUI的设计比较直接,所有…

Unity3D 《拥挤城市》3D房子建筑透视效果实

3D游戏,经常会看到透视效果,例如《王者荣耀》草丛透视,《拥挤城市》建筑透视。 实现原理:把3D模型MeshRenderer中Materials替换成透明材质球。 举例:《拥挤城市》3D房子建筑透视效果实现,效果如下图&…

Unity2020高清渲染管线

一、高清渲染管线加载与环境配置 这里使用2019.3.0f6版本 1、加载高清渲染管线(High Definition RP) 2、创建高清管线脚本文件 3、配置高清渲染管线环境(把色彩空间改为线性空间) 4、把高清渲染管线脚本添加到图形(G…

Unity Xlua热更新框架(一):概述与效果演示

1. 资源目录划分 资源:热更新资源和热更新步骤(Bundle),,,,资源需要打成Bundle包,通过不重新安装安装包的情况,去更新和替换资源代码:Lua与C#的交…

Unity3D教程:实现房产项目中的材质动态切换

在许多典型的房产展示项目当中,经常需要动态地实现例如墙纸、地板等材质的更换以获得不同的展示效果,下面将通过一个简单的教程介绍实现这一功能的关键技术。 首先需要场景中创建一个简易的样品房,样品房里面有一个地面和两面相互垂直的墙壁…

【GAMES-104现代游戏引擎】4、引擎渲染基础(渲染基础数据、全局光照、PBR、阴影)

Lecture04~05 1、光栅化流程2、一丢丢显卡知识3、网格绘制组件(Mesh Render Component)4、材质5、资源池(Resource Pool)6、Cluster-Based Mesh Pipeline7、渲染 游戏渲染的挑战 一个场景包含成千上万的GO需要的材质、shader、效果…

重回游戏公平,向游戏打金工作室宣战!

什么是打金工作室? 近几年中国游戏市场持续发展,国产自研精品游戏层出不穷,游戏产业精品化、高质量健康发展趋势稳定。根据中国音数协游戏工委(GPC)与中国游戏产业研究院发布的《2022年中国游戏产业报告》显示&#xf…

GPT-4 API平替?性能媲美同时成本降低98%,斯坦福提出FrugalGPT,研究却惹争议

来自:机器之心 进NLP群—>加入NLP交流群 Game Changer 还是标题党? 随着大型语言模型(LLM)的发展,人工智能正处于变革的爆发期。众所周知,LLM 可用于商业、科学和金融等应用,因而越来越多的公…

FrugalGPT

随着大型语言模型(LLM)的发展,人工智能正处于变革的爆发期。众所周知,LLM 可用于商业、科学和金融等应用,因而越来越多的公司(OpenAI、AI21、CoHere 等)都在提供 LLM 作为基础服务。虽然像 GPT-…

使用chatGPT生成一个带圆角的Container

我在项目中是想实现如图带圆角的Container,使用chatGPT生成步骤如下。 首先,生成渐变色的Container 生成的Container代码如下: Container(margin: EdgeInsets.fromLTRB(30, 0, 30, 0),height: 200.0,width: double.infinity,decoration: BoxD…

ChatGPT-4 如何改变 AI 市场及其对未来的影响?GPT版本及其差异

GPT-1 对比 GPT-2 对比 GPT-3。Chat GPT (Generative Pre-trained Transformer) 是一种高级自然语言处理模型,它使用机器学习算法来生成看起来像人类所写的文本。GPT模型的发展彻底改变了人工智能领域,特别是在语言处理领域。 多年来,已经发布了多个版本的 GPT 模型,每个版…

AI新风向标PaLm2?能否取代ChatGPT成为AI领域的老大

AI新风向标PaLm2? ​ 前几天Google发布了,PaLM2作为Google的下一代大型语言模型,它会取代ChatGPT成为更智能的AI工具吗? 关于PaLM2 ​ PaLM 2是Google的下一代大型语言模型,它建立在谷歌在机器学习和负责任的人工智能方面的突破…

部落冲突外挂

有人玩部落冲突吗,我这里有挂,加我qq3083413274,我给你。

最新最全文献下载网站:文献部落——一站式查找、下载文献!

来喽来喽! 小编带着新鲜出炉的“文献部落”来喽!同样是文献下载,凭啥只有他值得我推荐?还不是因为好用?!你以为只有SCI吗?太天真了!你往下看↓↓↓ 文献部落:http://459…

外文文献检索网站

1. Google scholar 网址: https://scholar.google.com.hk/?hlzh-CN 如今搜索论文的首选,可以在这里查看论文统计和引用参考文献,还能通过关注作者或者论文获得新论文更新提醒,以及利用自动化推荐来提供一个基本库 2. DBLP 网址…

COC部落冲突自动找鱼 python脚本

众所周知,最近COC被腾讯收购了,又整了一波活,花里胡哨的兵种都不认识了,这件事我不做评价吧。 图个新鲜感,高中几个哥们突然又玩起了部落冲突,打🐟一时爽,一直打🐟一直爽…

代码故事:汉德的救赎

我叫汉德(Handle),是一段程序代码,出生在日食之城埃地特(Editor)。 我诞生于伟大而荣耀的瑟维斯家族(Service),我们家族的格言是:“瑟维斯永不倒下。(Services never crash down.)”。 信仰 我们家族的信仰,哦,不对,应该是所有代码家族的信仰都是普瑞格兰姆神…

coc部落冲突脚本辅助工具,小曦coc,PHP随机数生成代码

什么是脚本? (1)脚本就是剧本 (2)脚本是普通的文本文件,是批处理文件 (3)脚本导演了一个序列事件的发生 (4)脚本让一个例行任务效率大幅提升 游戏脚本基本只…

英文文献调研方法综述

文章目录 1. 进行英文文献调研的理由2. 文献调研的纲要2.1. 文献调研的目的2.2. 文献调研的原则2.3. 文献调研的步骤 3. 常用的搜索平台及数据库3.1. 文献搜索平台3.1.1. Text Analyzer3.1.2. Web of Science3.1.3. Google Scholar3.1.4. CORE & DOAJ3.1.5. ProQuest 3.2. …