xLua热更新

什么样的代码执行能支持热更新;

两种模式:

模式一:将所有的代码指令先加载到内存--代码段,然后在执行;

C++开发的程序--->代码指令--->内存里面;

普通Unity C#开发程序--->跑起来所有C#的代码都被加载到内存;

没有动态的改变--->不支持热更新,需要重新安装,替换原来的代码,才能更新;

模式二:将主要的核心代码先加载到内存--代码段,然后程序就跑起来了,运行业务逻辑代码

先加载代码到内存,然后在执行,动态加载执行;--->热更新

程序跑起来以后--->去最新的位置下载代码,下载好了,再装载代码,再执行最新代码;

既然装载最新代码,代码就跑出最新代码的效果--->不用重新安装app;

eg:chrome先跑起来;

去服务器加载网页代码:www.baidu.com --->百度的功能;

去服务器加载网页代码:www.google.com --->谷歌的功能;

游戏app--->跑起来,然后下载最新的业务逻辑代码--->跑的是最新的业务逻辑;

热更新:启动的核心代码是无法被热更的,

能够被热更的是动态装载执行的部分;

持热更新,需要重新安装,替换原来的代码,才能更新;

为什么会选择Lua,做热更的xLua是什么?如何搭建xLua开发环境;

 Lua:游戏客户端开发比较广泛(魔兽世界) Lua解释执行--->接近于native性能

    xLua:它是Lua在C#环境(.net)Lua解决方案;

        1.C#环境下的Lua代码解释器(Lua虚拟机);

        2.Unity的接口做好了,方便Lua开发的时候调用;

        3.可以把部分的C#代码,使用Lua修正;

基于xLua的纯Lua开发框架的基本原则有哪些?

 1.我们游戏场景里面不放任何物体:方便维护,避免冲突,释放物体的逻辑,代码体现出来;(保证场景是空的)

        当节点多的时候,时间长了,不记得场景的结构关系;场景只作为运行时候的容器,所有的物体通过代码new出来,这样维护起来搜索代码就可以知道;

    2.运行的时候只有一个场景,不会有场景切换,地图,角色,特效,粒子。。。--->资源做成预制体给代码使用;

    3.不手动往节点上面挂代码;角色模型--->prefab --->prefab + 脚本代码,维护代码方便;

        文本搜索--->哪里的代码被调用,使用AddComponent;

    4.纯AssetsBundle来做资源加载,代替Resources;(关键)

        a:方便更新:更新代码(Lua代码)---> ab包出来 + 更新资源(AssetsBundle)

        b:方便打空包:1.场景 + 场景依赖的资源; 2.Resources文件夹下的所有资源打入安装包,不方便打空包;

    5.制定一个纯Lua的组件化开发框架--->方便编写业务逻辑,以及逻辑计算,减少Lua调用我们的C#,让性能更好;

    6.调试模式:调试模式加载Lua代码,加载资源--->AssetsDatabase来加载资源---> Editor模式下使用;

      发布模式:Lua--->脚本代码ab包,资源ab包,更新,加载;

编写一个基于xLua的基本框架

step1:项目的目录结构分类

1.AsstsPackage:用来存放所有的游戏资源,打ab包就打在这个文件夹下面的内容--->分成ab包;

    2.Scenes:用来存放我们的游戏场景:运行时候Main场景,美术,策划使用的场景;

    3.Scripts:用来存放我们的C#代码;--->框架性质的代码;

    4.LuaScripts:用来存放我们的Lua代码;--->代码可以做热更新;

    5.StreamingAssets:我们创建出来,用来放我们的ab包,如果不打空包,ab包的资源通过该文件夹带到安装包中,把ab复制到StreamingAssets下,(好处1:如果不打空包,ab可以被打包进来;

    StreamingAssets--->UnityWebRequest--->ab包读取出来;)

    6.Editor:扩展我们的编辑器;

step2:框架启动的全过程

  1.全局唯一的实例--->单例模式--->

    Utils:工具性质的代码    eg:单例

实现独立化的Lua基本开发

 step1:内置Lua虚拟机--->解释执行Lua代码;

        Managers--->xLuaManager,内置初始化Lua虚拟机代码;

    step2:将Lua代码与C#代码脱离出来,虚拟机加载我们的文本代码,并执行;

        C# Lua虚拟机装载执行第一个Lua脚本,main.lua

 step3:LuaScript

        启动代码main.lua

        utils/managers:Lua框架性质的代码;

        game:游戏逻辑代码;

    step4:自定义一个Lua代码装载器,当我们请求装载代码的时候,到我们的项目特定的位置加载我们的Lua代码;

        装载代码--->自定义装载器,实现一个装载器,在我们的特定目录下来装载代码;

    step5:我们的装载模式:

        调试模式:LuaScripts这个路径下加载就可以了;

        发布模式:LuaScripts--->ab包--->从ab包里面来加载Lua代码内容;

如何热更新代码与资源

  .lua打包ab包打不进去,改成.lua.bytes打进去;

    Lua脚本--->lua.assetsbundle 和普通资源一样,下载下来;

    加载lua脚本时,我们从ab包里面加载,最新的lua代码,加载完在执行;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值