框架介绍
xLua是当下最流行的unity热更方案之一,作者是腾讯的车雄生前辈,自2016年初推出以来,已经在腾讯的多款游戏项目上应用,目前xLua已经开源到了GitHub。xLua最大的特色是不仅支持纯lua脚本热更,更是可以做 C# 代码的bug hotfix,即平时开发时使用C#,项目上线后,如果突然发现有bug,可以直接用lua去修复出bug的地方,原理就是通过[Hotfix]特性标记然后在IL逻辑层判断修改逻辑,使程序去执行更新后的lua逻辑代码而不是走之前的C#逻辑。
 
框架优势
与别的lua热更插件不同的是,别的lua热更方案基本都是项目中需要热更的部分一开始就需要用lua语言去实现,xlua的HotFix出现之前,基本所有的lua热更方案都是如此,这样做的不足之处有:lua的性能是不如C#的,这是最主要的,此外,有些项目刚开始做时都是用C#的,如果已经用C#做完了,这时再去接入lua,把需要逻辑热更的C#代码重新用lua去实现,这样就麻烦了不少,费时费力,而且两种语言配合开发时还容易碰上伤脑筋的bug。使用xlua的HotFix,就可以平时开发用C#
,C#写起来比lua舒服多了吧;运行的时候也是C#,性能也比lua强;可能会出现bug或者需要热更逻辑的地方打上[HotFix]特性标签,然后就下载lua脚本文件更新实现即可,等到下次大版本更新时,再把lua补丁换成正确的C#实现。同时,xlua的易用性更是秒杀其他lua热更插件,在编辑器下无需生成代码,使用简单,不像其他lua热更插件每次更新代码就需要点Code Generate。
 
HotFix使用
xLua的纯lua热更使用方式跟其他lua热更方案大同小异,这里只简单介绍一下HotFix使用。
首先,对于可能出现bug或者后期需要更新逻辑的地方,给这个类加上[HotFix]标签,并在方法上打上[LuaCallCSharp]标签,例如下面这个类,打上[HotFix]标签,CreatePrize()方法上打上[LuaCallCSharp]标签,那么当需要更新这个方法时,只需在lua脚本中重新实现这个方法。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using XLua; [Hotfix]
public class Treasour : MonoBehaviour {
public GameObject gold;
public GameObject diamands;
public Transform cavas;
[LuaCallCSharp]
private void CreatePrize()
{
for (int i = ; i < ; i++)
{
GameObject go = Instantiate(gold, transform.position + new Vector3(-10f + i * , , ), transform.rotation);
go.transform.SetParent(cavas);
GameObject go1 = Instantiate(diamands, transform.position + new Vector3(, , ) + new Vector3(-10f + i * , , ), transform.rotation);
go1.transform.SetParent(cavas);
}
}
}
在lua脚本中,如下:
local UnityEngine=CS.UnityEngine
xlua.hotfix(CS.Treasour,'CreatePrize',function(self)
for i=,, do
local go=UnityEngine.GameObject.Instantiate(self.gold,self.transform.position+UnityEngine.Vector3(-+i*,,),self.transform.rotation)
go.transform.SetParent(go.transform,self.cavas)
local go1=UnityEngine.GameObject.Instantiate(self.diamands,self.transform.position+UnityEngine.Vector3(,,)+UnityEngine.Vector3(-+i*,,),self.transform.rotation)
go1.transform.SetParent(go1.transform,self.cavas)
end
end)
当客户端下载lua脚本后,就会自动执行lua中的CreatePrize方法,这样就实现了代码热更。
void Start(){ 
 if(_hotfix) 
  _lua_CreatePrize;  
else 
  _csharp_CreatePrize;
}
 
 

lua热更框架之XLua的更多相关文章

  1. 客户端热更新框架之UI热更框架设计(上)

    什么是热更新,为什么需要热更新?          热更新是目前各大手游等众多App常用的更新方式.简单来说就是在用户通过App Store下载App之后,打开App时遇到的即时更新.对于手游客户端来 ...

  2. 客户端热更新框架之UI热更框架设计(下)

    上一篇笔者介绍了关于什么是热更新,为什么需要热更新的技术文章.本篇就专门针对UI框架的热更新功能实现部分展开讨论,讨论的重点是热更新如何与UI框架进行结合? 现在笔者把设计“UI热更新框架”的整体设计 ...

  3. 出售一套Unity + Lua热更新框架代码

    出售一套Unity + Lua的客户端框架代码,功能有资源管理.网络通信.配置文件解析.热更新.文件读写.Lua加密揭秘.UI框架.打包工具.编辑器工具等,已经在多个实际项目(已上线)中使用.代码优雅 ...

  4. Lua热更系统

    1.介绍 使用脚本开发游戏业务逻辑其中一个好处就是代码可线上热更,不停机修复bug.而热更代码的写法与需要被热更的文件的代码又有着密切的关系,本文介绍一种热更方法. 2.热更原理 Lua提供一个叫re ...

  5. Unity3D游戏xlua轻量级热修复框架

    这是什么东西 前阵子刚刚集成xlua到项目,目的只有一个:对线上游戏C#逻辑有Bug的地方执行修复,通过考察了xlua和tolua,最终选择了xlua,原因如下: 1)项目已经到了后期,线上版本迭代了 ...

  6. Unity3D游戏轻量级xlua热修复框架

    Unity3D游戏轻量级xlua热修复框架   一 这是什么东西 前阵子刚刚集成xlua到项目,目的只有一个:对线上游戏C#逻辑有Bug的地方执行修复,通过考察xlua和tolua,最终选择了xlua ...

  7. 热更新-----为何使用lua进行热更

    事实上我们在安卓端是可以使用c#jit的,但是我们在ios上的代码是AOT(预先编译,静态编译)的,不能用c# jit(实时编译,即时编译). ios不能用c#热更是因为启动了CPU的No eXecu ...

  8. lua热重载

    热重载,就是不重新开unity让代码的变化直接看出来,一般在开发时候使用 lua中通过require导入的文件,最终都存在package.loaded这个table中.require会判断是否文件已经 ...

  9. Unity热更方案汇总

    http://www.manew.com/thread-114496-1-1.html   谈到目前的代码热更方案:没什么特别的要求   <ignore_js_op>    toLua(效 ...

随机推荐

  1. SSH登录警告(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!)

    在配置本机与docker容器实现ssh无密码访问时出现以下报错 # federico @ linux in ~ [18:35:52] C:127$ sudo ssh-copy-id -i .ssh/i ...

  2. Autofac创建实例的方法总结[转]

    1.InstancePerDependency 对每一个依赖或每一次调用创建一个新的唯一的实例.这也是默认的创建实例的方式. 官方文档解释:Configure the component so tha ...

  3. linux系统编程之文件与IO(二):系统调用read和write

    read系统调用 一旦有了与一个打开文件描述相连的文件描述符,只要该文件是用O_RDONLY或O_RDWR标志打开的,就可以用read()系统调用从该文件中读取字节 函数原型: #include &l ...

  4. error while loading shared libraries: libudev.so.0 的问题

    在linux下运行koala的时候遇到了问题: 应该是缺少文件libudev.so.0 在/lib和/lib64目录下也都没有这个文件.然后网上找解决方案,在/lib/x86_64-linux-gnu ...

  5. 超简单工具puer——“低碳”的前后端分离开发

    本文由作者郑海波授权网易云社区发布. 前几天,跟一同事(MIHTool作者)讨教了一下开发调试工具.其实个人觉得相较于定制一个类似MIHTool的Hybrid App容器,基于长连的B/S架构的工具其 ...

  6. CentOS更改ssh端口

    https://blog.csdn.net/lukaixiao/article/details/74852375  来源处处. 注意!这里的Centos版本是7 step1 修改SELinux ech ...

  7. day 94 RestFramework序列化组件与视图view

    一 .复习 1. CBV流程 class BookView(View): def get(): pass def post(): pass #url(r'^books/', views.BookVie ...

  8. openvswitch 驱动卸载失败(Module openvswitch is in use)

    现象: [root@ostack1 ~]# modprobe -r openvswitchmodprobe: FATAL: Module openvswitch is in use. 解决: [roo ...

  9. Servlet实现session读写

    前言     一个女人让他的程序员丈夫去商店买东西:你去附近的商店买些面包,如果有鸡蛋的话,买6个回来,这个丈夫买了6个面包回来,他的妻子大吃一惊:你为什么买了6个面包?! 程序员丈夫回答:因为他们有 ...

  10. [Auto Testing] 工具准备:Selenium 与 ChromeDriver

    <留存> Selenium http://selenium-release.storage.googleapis.com/index.html https://www.seleniumhq ...