上篇文章:
Unity XLua学习笔记(三):Lua调用C#
热补丁主要作用是用Lua替换C#中的方法
在做热补丁前,需要将GitHub上下载的XLua工程中的Tools文件夹导入到项目中


导入时注意路径,需要放在Assets文件的同级路径下

回到Unity中,打开PlayerSettings,做如下设置
输入:HOTFIX_ENABLE

C#测试代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using XLua;
[Hotfix]
public class HotfixTestClass
{//构造函数public HotfixTestClass(){Debug.Log("HotfixTest构造函数");}public void Speak(string str){Debug.Log(str);}//析构函数~HotfixTestClass(){}
}
[Hotfix]
public class HotfixTest : MonoBehaviour
{HotfixTestClass hotTest;// Start is called before the first frame updatepublic int[] array=new int[] {1,2,3};event UnityAction myEvent;public int Age{get{return 0;}set{Debug.Log(value);}}//索引器public int this[int index]{get{if(index>array.Length||index<0){Debug.Log("索引不正确");return 0;}return array[index];}set{if(index>=array.Length||index<0){Debug.Log("索引不正确");return;}array[index]=value;}}void Start(){XLuaMgr.GetInstance().Init();XLuaMgr.GetInstance().DoLuaFile("Main");Debug.Log( Add(10,20));Speak("dkjfalsdk");hotTest=new HotfixTestClass();hotTest.Speak("嘻嘻嘻嘻嘻");//StartCoroutine(TestCoroutine());// this.Age=100;// Debug.Log(this.Age);// this[99]=100;// Debug.Log(this[9999999]);// myEvent+=TestTest;// myEvent-=TestTest;}private void TestTest(){}// Update is called once per framevoid Update(){}IEnumerator TestCoroutine(){while(true){yield return new WaitForSeconds(1f);Debug.Log("C#协程打印一次");}}public int Add(int a,int b){return 0;}public static void Speak(string str){Debug.Log("哈哈哈哈");}
}

Lua代码

print("************第一个热补丁****************")--直接写好代码 运行 时会报错的
--我们必须做4个非常重要的操作
--1.加特性
--2.加宏 第一次开发热补丁需要加
--3.生成代码
--4.hotfix注入 注入时可能报错 提示你要引入Tools--热补丁的缺点:只要我们修改了热补丁类的代码,我们就需要重新执行第4步
--需要重新点击 注入--lua当中 热补丁代码固定写法
--xlua.hotfix(类,"函数名",lua函数)xlua.hotfix(CS.HotfixTest,"Add",function(self,a,b)return a+b
end)--静态函数 不用传第一个参数
xlua.hotfix(CS.HotfixTest,"Speak",function(a)print(a)
end)

在运行前,一定注意所有要进行热补丁的C#类,都要加上[Hotfix],同时执行XLua----->Generate Code,最后执行XLua-------->Hotfix Inject in Editor
只要这些被打伤特性的C#代码发生了改变,就必须重新执行XLua-------->Hotfix Inject in Editor


首先执行这两句

对应的Lua代码和C#代码

运行程序,C#中的方法被Lua替换了

Lua热补丁多函数替换

Lua代码
构造和析构函数和别的函数不同 不是替换 是先调用原逻辑 再调用Lua逻辑

xlua.hotfix(CS.HotfixTest,{-- Update=function(self)--     print(os.time())-- end,Add=function(self,a,b)return a+bend,Speak=function(a)print(a)end
})xlua.hotfix(CS.HotfixTestClass,{--构造函数 热补丁 固定写法!!!--构造和析构函数和别的函数不同 不是替换 是先调用原逻辑 再调用Lua逻辑[".ctor"]=function()print("Lua热补丁构造函数")end,Speak=function(self,a)print("我说"..a)end,--析构函数固定写法Finalize=function()end
})

C#代码
HotfixTestClass类

[Hotfix]
public class HotfixTestClass
{//构造函数public HotfixTestClass(){Debug.Log("HotfixTest构造函数");}public void Speak(string str){Debug.Log(str);}//析构函数~HotfixTestClass(){}
}

HotfixTest类

[Hotfix]
public class HotfixTest : MonoBehaviour
{HotfixTestClass hotTest;// Start is called before the first frame updatepublic int[] array=new int[] {1,2,3};event UnityAction myEvent;public int Age{get{return 0;}set{Debug.Log(value);}}//索引器public int this[int index]{get{if(index>array.Length||index<0){Debug.Log("索引不正确");return 0;}return array[index];}set{if(index>=array.Length||index<0){Debug.Log("索引不正确");return;}array[index]=value;}}void Start(){XLuaMgr.GetInstance().Init();XLuaMgr.GetInstance().DoLuaFile("Main");Debug.Log( Add(10,20));Speak("dkjfalsdk");hotTest=new HotfixTestClass();hotTest.Speak("嘻嘻嘻嘻嘻");//StartCoroutine(TestCoroutine());// this.Age=100;// Debug.Log(this.Age);// this[99]=100;// Debug.Log(this[9999999]);// myEvent+=TestTest;// myEvent-=TestTest;}private void TestTest(){}// Update is called once per framevoid Update(){}IEnumerator TestCoroutine(){while(true){yield return new WaitForSeconds(1f);Debug.Log("C#协程打印一次");}}public int Add(int a,int b){return 0;}public static void Speak(string str){Debug.Log("哈哈哈哈");}
}

unity运行打印

Lua热补丁替换协程函数

C#代码


lua代码

运行Unity打印,协程被替换

Lua热补丁,属性和索引器替换

C#测试代码

Lua代码

运行Unity打印

Lua热补丁,事件±替换

C#测试代码


Unity运行打印

Unity XLua学习笔记(四):Hotfix热补丁相关推荐

  1. Unity Xlua之Hotfix热补丁 (一)

    Unity Xlua之Hotfix热补丁 (一) 一.第一个热补丁 想要打热补丁的类前需要加上[Hotfix]特性 第一次打热补丁需要加上宏HOTFIX_ENABLE 点击生成代码 点击注入热补丁 例 ...

  2. 【Unity ASE学习笔记】

    Unity ASE学习笔记 一.工具比较 二.ASE插件工具下载 三.ASE界面 主要工作区详解 四.节点 常用节点概览 4.1.贴图节点 4.2.常数节点 4.3.四则运算(+ - * /) 4.4 ...

  3. Unity Shader 学习笔记(3)URP渲染管线带阴影PBR-Shader模板(ASE优化版本)

    此 Shader 已经不是最新版本,最新版本见本专栏的第四篇文章: Unity Shader 学习笔记(4) 材质面板截图: 功能实现(URP渲染管线下): PBR材质.投射和接收阴影. 代码展示: ...

  4. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  5. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  6. RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)

    RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...

  7. JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档

    POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...

  8. Ethernet/IP 学习笔记四

    Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...

  9. OpenCV学习笔记四-image的一些整体操作

    title: OpenCV学习笔记四-image的一些整体操作 categories: 编程 date: 2019-08-08 12:50:47 tags: OpenCV image的一些操作 sP4 ...

  10. 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码

    吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...

最新文章

  1. WPF TreeView HierarchicalDataTemplate
  2. 苹果怎么换行打字_停课不停学!苹果电脑学习类软件推荐,丰富您的假期生活...
  3. Flutter Hero 实现组件跨界面跳动效果
  4. mysql出现Access denied for user ‘root‘@‘%‘ to database ‘xxx‘ 解决办法
  5. php 批量转换文档编码格式_据说是国内最好的文档格式转换网址~PDF,PPT,EXCEL,WORD互相转换...
  6. mysql中ifnull函数
  7. vue 时间回显 格式化_VSCode 开发Vue必备插件
  8. centos7 部署elasticsearch
  9. css里面设置body背景图片满屏
  10. es 在数据量数亿级别提高查询效率?
  11. 从棋盘左上角到右下角共有多少种走法
  12. 亮风台AR眼镜震撼发布 HiAR 产品全面升级
  13. rf扫描枪_RF枪(RF手持扫描枪)是什么,有什么用途?
  14. 小案例:利用图床自动化批量上传图片并获取图片链接
  15. html5如何引用百度地图api,WebApp如何调用百度地图API
  16. jquery banner广告图片左右切换,模仿实现支付宝广告效果
  17. 基于arduino的5路循迹小车(1)
  18. 【字符串】Hash表
  19. 软件版本各阶段英文名称
  20. 单独安装OneNote

热门文章

  1. 【书影观后感 八】《周期》万事皆周期
  2. 怎样使用迅雷提高下载速度
  3. Gym - 100781A Adjoin the Networks (树的直径)
  4. 0-12V的模拟量隔离模块的一些感悟
  5. PS的钢笔,路径,选取,描边(虚线)
  6. 肖邦 第一叙事曲 赏析
  7. 庚子年十月初九——十月十五
  8. nebula模拟器_nebula模拟器
  9. Linux如何改为北京时间
  10. 我收藏的一些RSS订阅频道