浅谈腾讯热更新开源框架xLua自定义Loader
来源:互联网 发布:it职业技术学校 编辑:程序博客网 时间:2024/05/31 13:16
前几个月腾讯开源了一套热更新、热补丁解决方案,托管在Github,点击进入
最近抽出时间学习下,研究了下官方文档,受益颇深
本文我来介绍xLua的自定义Loader
先介绍两种Lua文件加载方法
一.执行字符串方法
LuaEnv luaenv = new LuaEnv(); luaenv.DoString("print('hello world')");
二.执行Lua文件方法
LuaEnv luaenv = new LuaEnv(); luaenv.DoString("require ('byfile')");
其中byfile是文件名,存放在Resources文件下,以.lua.tex为后缀名
问题来了,require是怎样的执行过程?
实质上,require是一个个的调用Loader查找出匹配的Lua文件,然后执行该文件
在xLua中我们可以自定义添加Loader
public delegate byte[] CustomLoader(ref string filepath);public void LuaEnv.AddLoader(CustomLoader loader)
通过AddLoader可以注册个回调,该回调参数是字符串,lua代码里头调用require时,参数将会透传给自定义回调函数和原生回调函数
回调中就可以根据require里的参数去加载指定文件。该回调返回值是一个byte数组,如果为空表示该loader找不到,否则返回lua文件的内容
以下代码是我自己模拟实现了一遍
using System.Collections;using System.Collections.Generic;using UnityEngine;using XLua;public class SelfCustomLoader : MonoBehaviour {private LuaEnv luaEvn = null;// Use this for initializationvoid Start(){//创建lua解释器luaEvn = new LuaEnv();LuaEnv.CustomLoader method = CustomLoaderMethod;//添加自定义装载机LoaderluaEvn.AddLoader(method);//当在Lua代码里调用了request使,request里的参数将传给回调函数里的参数luaEvn.DoString(" require('Loader1') ");luaEvn.DoString(" print( require('Loader2').a )");luaEvn.DoString(" require('Loader3') ");}// Update is called once per framevoid Update(){}private byte[] CustomLoaderMethod(ref string fileName){Debug.Log(fileName);//找到指定文件if ("Loader1" == fileName){string str = "print('Loader1>>>>>')";return System.Text.ASCIIEncoding.UTF8.GetBytes(str);}if ("Loader2" == fileName){string str = "return {a=0}";return System.Text.ASCIIEncoding.UTF8.GetBytes(str);}return null;}}
==================== 即步 CSDN博客专栏=================
博客地址:http://blog.liujunliang.com.cn
个人网站:http://www.liujunliang.com.cn
==================== battle for programming =============
欢迎转载,转载注明出处!!!
1 0
- 浅谈腾讯热更新开源框架xLua自定义Loader
- xlua 热更新
- [Unity XLua]热更新XLua入门(一)-基础篇
- [Unity XLua]热更新XLua入门(二)-俄罗斯方块实例篇
- 初探腾讯Unity手游热更新方案xlua
- Unity3d腾讯手游热更新方案Xlua编程
- 腾讯bugly热更新
- XLUA的热更新example运行的笔记
- 腾讯开源手游热更新方案Xlua尝鲜(五)——xLua的配置
- 腾讯开源手游热更新方案Xlua尝鲜(六)——xLua的相关API
- 腾讯开源手游热更新方案Xlua尝鲜(一)
- 腾讯开源手游热更新方案:Unity3D下的XLua方案介绍
- 浅谈游戏热更新
- Xlua热补丁原理
- Android 腾讯Bugly 热更新
- Android Bugly 热更新详解,腾讯微信Tinker的开源方案
- 腾讯的热修复框架
- android 热更新框架
- #define new DEBUG_NEW
- 从输入url到页面展示到底发生了什么
- 微信开发接口配置和Web开发工具
- 哈夫曼树算法实现
- 幸存者偏见
- 浅谈腾讯热更新开源框架xLua自定义Loader
- linux下解压命令大全
- iOS
- 1051. 复数乘法
- loadrunner中lr_wasted_time函数
- SCUT125 华为杯 D.笔芯回文 —— DP
- ZigZag Conversion
- lightoj 1205
- error C2589: “(”:“::”右边的非法标记