• 8种家居环境很败“性” 2019-06-28
  • 2018年全军院校招生计划下达:计划招收学员3.05万名 2019-06-15
  • 晋城市举办干部素质提升工程第十八期专题讲座 2019-06-15
  • 抖音广告出现对英烈邱少云不敬内容 今日头条致歉 2019-06-13
  • 超半数巴西民众对世界杯不感兴趣--旅游频道 2019-06-12
  • 外交部举行中外媒体吹风会:王毅介绍上合组织青岛峰会情况 2019-06-12
  • 2018网络中国节·端午 2019-06-04
  • 韩媒:韩美商定暂停原定8月“乙支自由卫士”联演 2019-06-03
  • 重庆市公安局交通管理局互联网交通安全服务管理平台 2019-06-03
  • 俄侦察船穿越英吉利海峡 英国急派军舰战机监视 2019-05-28
  • 网购陷阱多 女子花3000元买5套化妆品只有2套是真的 2019-05-28
  • 环保约谈濂溪区主要负责同志 谢一平要求立行立改真抓真改 2019-05-25
  • 官宣!广东签约北京3冠功勋 大莫助拳阿联未来可期 2019-05-25
  • 党建第一责任与发展第一要务相融合br全面提升机关党建工作水平 2019-05-22
  • 卡纳瓦罗:对比赛结果不满意 晋级机会各占一半 2019-05-22
  • 广东南粤风采36选7官网: 刘国柱 热更新之lua框架设计

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

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

    主题

    103

    帖子

    890

    积分

    Rank: 9Rank: 9Rank: 9

    UID
    34511
    好友
    41
    蛮牛币
    1373
    威望
    0
    注册时间
    2014-7-15
    在线时间
    459 小时
    最后登录
    2019-7-15

    专栏作家

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

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

    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



    5熟悉之中
    945/1000
    排名
    10817
    昨日变化

    3

    主题

    691

    帖子

    945

    积分

    Rank: 5Rank: 5

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

    回帖奖励 +2

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

    78

    主题

    667

    帖子

    3996

    积分

    Rank: 9Rank: 9Rank: 9

    UID
    93357
    好友
    6
    蛮牛币
    20151
    威望
    0
    注册时间
    2015-4-18
    在线时间
    1401 小时
    最后登录
    2019-7-16

    专栏作家认证开发者

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

    1

    主题

    236

    帖子

    622

    积分

    Rank: 5Rank: 5

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

    0

    主题

    308

    帖子

    1003

    积分

    Rank: 6Rank: 6Rank: 6

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

    0

    主题

    39

    帖子

    406

    积分

    Rank: 4

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

    1

    主题

    246

    帖子

    765

    积分

    Rank: 5Rank: 5

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

    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熟悉之中
    566/1000
    排名
    10706
    昨日变化

    0

    主题

    338

    帖子

    566

    积分

    Rank: 5Rank: 5

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

    0

    主题

    1259

    帖子

    1958

    积分

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

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

    1

    主题

    131

    帖子

    358

    积分

    Rank: 4

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

    20

    主题

    103

    帖子

    890

    积分

    Rank: 9Rank: 9Rank: 9

    UID
    34511
    好友
    41
    蛮牛币
    1373
    威望
    0
    注册时间
    2014-7-15
    在线时间
    459 小时
    最后登录
    2019-7-15

    专栏作家

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

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

    20

    主题

    103

    帖子

    890

    积分

    Rank: 9Rank: 9Rank: 9

    UID
    34511
    好友
    41
    蛮牛币
    1373
    威望
    0
    注册时间
    2014-7-15
    在线时间
    459 小时
    最后登录
    2019-7-15

    专栏作家

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

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

    20

    主题

    103

    帖子

    890

    积分

    Rank: 9Rank: 9Rank: 9

    UID
    34511
    好友
    41
    蛮牛币
    1373
    威望
    0
    注册时间
    2014-7-15
    在线时间
    459 小时
    最后登录
    2019-7-15

    专栏作家

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

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

    6

    主题

    376

    帖子

    608

    积分

    Rank: 5Rank: 5

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

    本版积分规则

  • 8种家居环境很败“性” 2019-06-28
  • 2018年全军院校招生计划下达:计划招收学员3.05万名 2019-06-15
  • 晋城市举办干部素质提升工程第十八期专题讲座 2019-06-15
  • 抖音广告出现对英烈邱少云不敬内容 今日头条致歉 2019-06-13
  • 超半数巴西民众对世界杯不感兴趣--旅游频道 2019-06-12
  • 外交部举行中外媒体吹风会:王毅介绍上合组织青岛峰会情况 2019-06-12
  • 2018网络中国节·端午 2019-06-04
  • 韩媒:韩美商定暂停原定8月“乙支自由卫士”联演 2019-06-03
  • 重庆市公安局交通管理局互联网交通安全服务管理平台 2019-06-03
  • 俄侦察船穿越英吉利海峡 英国急派军舰战机监视 2019-05-28
  • 网购陷阱多 女子花3000元买5套化妆品只有2套是真的 2019-05-28
  • 环保约谈濂溪区主要负责同志 谢一平要求立行立改真抓真改 2019-05-25
  • 官宣!广东签约北京3冠功勋 大莫助拳阿联未来可期 2019-05-25
  • 党建第一责任与发展第一要务相融合br全面提升机关党建工作水平 2019-05-22
  • 卡纳瓦罗:对比赛结果不满意 晋级机会各占一半 2019-05-22
  • 广东好彩1开奖助手 河北时时彩平台哪个好 河北20选5开奖规则 火爆四肖中特在哪里找 18选7追号计划 2019年3d走势图 壹起牛牛下载安装 湖北新快3 重庆时时彩三星彩经网 浙江快乐12玩法介绍 幸运飞艇计划91计划网 福利七乐彩走势图 扑克牌九 年期特码号码 特区彩票论坛首页