• 回复@大雨582:社会人不可能像自然人一样自由,你还得尊重别人的意愿!不然咱随便生产啥都强行让你要,咱是自由了,你呢? 2019-10-12
  • 发改委每月首个工作日公布限制乘坐火车飞机人员名单 2019-10-12
  • 全国啦啦操联赛临汾站开幕 2019-10-08
  • 《爱疯音乐家》陈洁仪:不完美的美其实更美爱疯音乐家陈洁仪 2019-10-08
  • 中冶置业兴隆百万平米新城正式亮相 将打造全配套高铁康养小镇 2019-10-06
  • 以政府拟严打“乱拍摄”以军行为 最高10年监禁 2019-10-03
  • 图解:关于中国梦,习近平总书记这十句话直抵人心 2019-09-20
  • “舌尖”之后, “风味”能否再续辉煌? 2019-09-17
  • 腾讯要花32亿收购《绝地求生》开发商10%股份 2019-09-17
  • 涨知识!文字里的秘密 最全甲骨文书展来了 2019-09-13
  • 晋中市着力将“厕所革命”进行到底 2019-09-05
  • 供应链如何更“智慧” 2019-09-05
  • 红枣食疗效果好 6种吃法最滋补-美食资讯 2019-09-01
  • 党的十九大最重大的理论成就 2019-08-28
  • 余世存:阅读经典不仅是消费,也是责任 2019-08-20
  • 福建体彩31选走势图: 刘国柱 热更新之lua框架设计

    20
    回复
    2538
    查看
    打印 上一主题 下一主题
    [ 复制链接 ]

    福建36选7和值走势图 www.00-na.com 21

    主题

    107

    帖子

    916

    积分

    Rank: 9Rank: 9Rank: 9

    UID
    34511
    好友
    47
    蛮牛币
    1402
    威望
    0
    注册时间
    2014-7-15
    在线时间
    480 小时
    最后登录
    2019-10-19

    专栏作家

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有帐号?注册帐号

    x
    本帖最后由 liu_guozhu 于 2019-6-3 19:31 编辑

          目前中大型游戏项目包含部分VR与AR项目,都需要热更新与在线修改Bug等功能实现,虽然Xlua等插件已经给出了关于C#与Lua语言之间的双向无缝调用实现,但是就热更新的架构却没有提出,这需要广大游戏公司的开发人员自己来设计一套lua框架。
          早期热更新的概念与实现机理刚传入国内实现的时候,很多公司采用纯lua脚本的方式,来构建整个项目。 这种方式开发速度慢,且极易出错,开发效率不高。所以后来各公司就纯lua的热更新技术,自己来进行架构设计,引入例如MVC的分层理念,然后通过C#与lua之间的映射方式,来让lua文件获取unity的生命周期函数,以此来获得更高的开发效率。
          笔者认为最好的方式应该把业务功能相对稳定的功能用C#来开发,而lua框架部分也仅仅处理游戏项目中业务需求随事件频繁更新的业务需求,例如游戏中的“每日公告”,“每日任务”等。
         以上问题比较复杂,笔者本篇文章,就纯lua语言来开发一套简单的lua框架系统,实现以上描述的业务功能实现。
         首先为了避免直接深入代码的海洋,先就笔者设计的框架给出一个整体设计图,供参考。


    以上架构图从LuaStartGame这个C#脚本入口开始,然后后续业务基本采用lua语言编写。LuaStartGame.cs 脚本如下。
    [C#] 纯文本查看 复制代码
    namespace LuaFramework{
        public class LuaGameStart : MonoBehaviour{
            void Start(){
                    LuaHelper.GetInstance().DoString("require 'StartGame'");
            }
        }//Class_end
    }//namespace_end

         以上项目中的LuaHelper封装了Xlua的环境上下文(LuaEnv)、自定义lua文件的存取路径(不再使用xlua默认的Resources)以及常用lua方法等。
    StartGame.lua 脚本基本没有太多业务,主要起到承上启下,便于日后扩充的中间“过渡”脚本使用,代码如下:
    [C#] 纯文本查看 复制代码
    [/size][size=3]--引入项目常量与“枚举”
    require("SysDefine")
    --引入项目初始化核心脚本
    require("ProjectInit")
    --项目开始
    ProjectInit.Init()

        以上脚本SysDefine中以“表”(Table)的形式定义了项目中可能用到的所有“控制层”与“显示层”的lua脚本,以方便在后续lua脚本中使用,这个机制类似于C#中使用一个类来集中定义项目中所有的常量与枚举等类型。
        ProjectInit.lua 是本lua框架的一个核心,负责缓存项目中所有的“视图层”与“控制层”脚本。本脚本通过加载首个业务窗体(UIRootCtrl.lua)实现后续业务开发的持续运行。这里需要特别说明的是CtrlMgr.lua 脚本是负责缓存项目中所有控制层脚本的实例,以及提供控制层脚本访问的入口方法。

    [AppleScript] 纯文本查看 复制代码
    ---
    ---  “lua框架”项目初始化
    ---
    ---   功能:
    ---      1: 引入项目中所有的视图层脚本
    ---      2: 通过CtrlMgr.lua (控制层)脚本,来缓存系统中所有其他控制层脚本。
    ---      3: 提供访问其他控制层脚本的入口函数。
    ---      4: 调用项目中第一个UI预设控制层脚本。
    ---
    ---[/size][size=3]
    --引入控制层管理器脚本
    require("CtrlMgr")
    
    ProjectInit={}
    local this=ProjectInit
    [/size] [size=3]
    function ProjectInit.Init()
          --导入引入项目中所有的视图层脚本
          this.ImportAllViews()
          --lua控制器初始化
          CtrlMgr.Init()
          --加载UI‘根窗体’控制脚本
      CtrlMgr.StartProcess(CtrlName.UIRootCtrl)
    end
    
    --导入引入项目中所有的视图层脚本
    function ProjectInit.ImportAllViews()
          for i = 1, #ViewNames do
                 require(tostring(ViewNames[i]))
          end
    end


        再往后的lua代码都与具体的业务功能实现有关系?;径及凑丈杓瞥啥猿鱿?,例如本演示项目中的 UIRootCtrl.lua 与UIRootView.lua ,表示加载与显示UI根窗体。*Ctrl.lua定义玩家看不见的业务逻辑,例如加载与解析从服务器端传来的ab包资源,然后关于UI窗体内部的控件显示、显示方位、控件的事件注册等业务,都有*View.lua负责处理。这样实现了架构设计中的分层设计原理。
        最后值得说明的是,*View.lua是负责显示具体3D/2D游戏预设资源的脚本。其内部定义预设显示的“方式”、“具体内容”与“行为”(包含事件注册)等。而本部分我们采用了xlua的映射技术,使得“lua显示”脚本具备了Unity的常用生命周期函数,进一步大大简化了lua编写业务的难度,例如定义了常见的:Awake()、Start()、Update()、OnDestroy()等函数。
        为了避免编写超长的技术博客文章,关于其他代码的具体实现部分,笔者在最后提供lua架构的演示项目下载链接,供广大有兴趣学员学习研究,共同进步。

    下载链接与二维码:
          链接:https://pan.baidu.com/s/1BobsN0c_4bBr1LSwF2li3Q
          提取码:bquu



    6蛮牛粉丝
    1312/1500
    排名
    10819
    昨日变化

    3

    主题

    1009

    帖子

    1312

    积分

    Rank: 6Rank: 6Rank: 6

    UID
    310426
    好友
    0
    蛮牛币
    1903
    威望
    0
    注册时间
    2019-1-2
    在线时间
    204 小时
    最后登录
    2019-10-21
    沙发
    2019-6-4 08:40:39 只看该作者

    回帖奖励 +2

    lua框架设计
    排名
    331
    昨日变化

    83

    主题

    718

    帖子

    4162

    积分

    Rank: 9Rank: 9Rank: 9

    UID
    93357
    好友
    6
    蛮牛币
    20770
    威望
    0
    注册时间
    2015-4-18
    在线时间
    1511 小时
    最后登录
    2019-10-19

    专栏作家认证开发者

    QQ
    板凳
    2019-6-4 09:23:21 只看该作者
    Lua 热更新,请问用什么编辑器
    5熟悉之中
    712/1000
    排名
    16957
    昨日变化

    1

    主题

    278

    帖子

    712

    积分

    Rank: 5Rank: 5

    UID
    213085
    好友
    5
    蛮牛币
    600
    威望
    0
    注册时间
    2017-3-20
    在线时间
    395 小时
    最后登录
    2019-10-19
    地板
    2019-6-4 09:25:47 只看该作者
    学习一下 谢谢?。。。。。。。。。。?!
    6蛮牛粉丝
    1039/1500
    排名
    3928
    昨日变化

    0

    主题

    322

    帖子

    1039

    积分

    Rank: 6Rank: 6Rank: 6

    UID
    251353
    好友
    0
    蛮牛币
    7561
    威望
    0
    注册时间
    2017-10-29
    在线时间
    337 小时
    最后登录
    2019-10-17
    5#
    2019-6-4 09:49:35 只看该作者
    学习老师的LUA更新
    4四处流浪
    440/500
    排名
    9202
    昨日变化

    0

    主题

    43

    帖子

    440

    积分

    Rank: 4

    UID
    250135
    好友
    0
    蛮牛币
    422
    威望
    0
    注册时间
    2017-10-22
    在线时间
    272 小时
    最后登录
    2019-10-17
    6#
    2019-6-4 10:14:35 只看该作者
    支持刘老师。
    5熟悉之中
    854/1000
    排名
    4111
    昨日变化

    1

    主题

    303

    帖子

    854

    积分

    Rank: 5Rank: 5

    UID
    245227
    好友
    0
    蛮牛币
    1049
    威望
    0
    注册时间
    2017-9-21
    在线时间
    190 小时
    最后登录
    2019-10-17
    7#
    2019-6-4 10:34:19 只看该作者
    浓浓的MVC风格?
    4四处流浪
    308/500
    排名
    9113
    昨日变化

    0

    主题

    76

    帖子

    308

    积分

    Rank: 4

    UID
    191027
    好友
    0
    蛮牛币
    662
    威望
    0
    注册时间
    2016-12-10
    在线时间
    104 小时
    最后登录
    2019-7-13
    8#
    2019-6-4 11:37:52 只看该作者
    用什么Unity版本开发的呢?
    5熟悉之中
    940/1000
    排名
    10707
    昨日变化

    0

    主题

    663

    帖子

    940

    积分

    Rank: 5Rank: 5

    UID
    301976
    好友
    1
    蛮牛币
    1408
    威望
    0
    注册时间
    2018-10-31
    在线时间
    179 小时
    最后登录
    2019-9-30
    9#
    2019-6-4 14:19:34 只看该作者
    MVC确实是很浓。。。
    7日久生情
    2335/5000
    排名
    4093
    昨日变化

    0

    主题

    1581

    帖子

    2335

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    254705
    好友
    1
    蛮牛币
    2101
    威望
    0
    注册时间
    2017-11-16
    在线时间
    392 小时
    最后登录
    2019-10-21
    10#
    2019-6-4 15:02:43 只看该作者
    666666666666666666666666
    4四处流浪
    423/500
    排名
    16595
    昨日变化

    1

    主题

    137

    帖子

    423

    积分

    Rank: 4

    UID
    281418
    好友
    0
    蛮牛币
    692
    威望
    0
    注册时间
    2018-5-16
    在线时间
    243 小时
    最后登录
    2019-10-19
    11#
    2019-6-4 16:15:30 只看该作者
    lua框架设计   

    21

    主题

    107

    帖子

    916

    积分

    Rank: 9Rank: 9Rank: 9

    UID
    34511
    好友
    47
    蛮牛币
    1402
    威望
    0
    注册时间
    2014-7-15
    在线时间
    480 小时
    最后登录
    2019-10-19

    专栏作家

    12#
    楼主 2019-6-4 20:26:16 只看该作者
    gxguixin123 发表于 2019-6-4 09:23
    Lua 热更新,请问用什么编辑器

    我推荐用IDEA 配合lua插件,来开发lua脚本项目。

    21

    主题

    107

    帖子

    916

    积分

    Rank: 9Rank: 9Rank: 9

    UID
    34511
    好友
    47
    蛮牛币
    1402
    威望
    0
    注册时间
    2014-7-15
    在线时间
    480 小时
    最后登录
    2019-10-19

    专栏作家

    13#
    楼主 2019-6-4 20:28:42 只看该作者

    本纯lua框架只设计了关于“控制层”与“显示层”的分层结构。 显示层由C#脚本映射添加unity的生命周期,扩充功能,提高开发效率!

    21

    主题

    107

    帖子

    916

    积分

    Rank: 9Rank: 9Rank: 9

    UID
    34511
    好友
    47
    蛮牛币
    1402
    威望
    0
    注册时间
    2014-7-15
    在线时间
    480 小时
    最后登录
    2019-10-19

    专栏作家

    14#
    楼主 2019-6-4 20:29:57 只看该作者
    Feker 发表于 2019-6-4 11:37
    用什么Unity版本开发的呢?

    lua框架本质上与unity没有关系。 我在演示框架的Unity 所用版本是2017。 如果你用2018/2019,基本没有任何区别。
    5熟悉之中
    692/1000
    排名
    15911
    昨日变化

    6

    主题

    412

    帖子

    692

    积分

    Rank: 5Rank: 5

    UID
    313764
    好友
    2
    蛮牛币
    510
    威望
    0
    注册时间
    2019-2-13
    在线时间
    238 小时
    最后登录
    2019-10-18
    15#
    2019-6-21 15:05:43 只看该作者
    厉害厉害学到了
    您需要登录后才可以回帖 登录 | 注册帐号

    本版积分规则

  • 回复@大雨582:社会人不可能像自然人一样自由,你还得尊重别人的意愿!不然咱随便生产啥都强行让你要,咱是自由了,你呢? 2019-10-12
  • 发改委每月首个工作日公布限制乘坐火车飞机人员名单 2019-10-12
  • 全国啦啦操联赛临汾站开幕 2019-10-08
  • 《爱疯音乐家》陈洁仪:不完美的美其实更美爱疯音乐家陈洁仪 2019-10-08
  • 中冶置业兴隆百万平米新城正式亮相 将打造全配套高铁康养小镇 2019-10-06
  • 以政府拟严打“乱拍摄”以军行为 最高10年监禁 2019-10-03
  • 图解:关于中国梦,习近平总书记这十句话直抵人心 2019-09-20
  • “舌尖”之后, “风味”能否再续辉煌? 2019-09-17
  • 腾讯要花32亿收购《绝地求生》开发商10%股份 2019-09-17
  • 涨知识!文字里的秘密 最全甲骨文书展来了 2019-09-13
  • 晋中市着力将“厕所革命”进行到底 2019-09-05
  • 供应链如何更“智慧” 2019-09-05
  • 红枣食疗效果好 6种吃法最滋补-美食资讯 2019-09-01
  • 党的十九大最重大的理论成就 2019-08-28
  • 余世存:阅读经典不仅是消费,也是责任 2019-08-20
  • 混合过关3串1 上海快三走势图 利用平台不同倍率赚钱 真的有人靠网赌长期盈利吗 U乐国际 可以玩三公的棋牌游戏 猫咪的那个网址多少 2019年全年无错六肖六码 甘肃十一选五app 2005年大乐透走势图表 老快3走势 边锋十三张游戏下载 福彩6+1走势图 湖北11选走势图表 百人牛牛游戏单机