Xlua热更新笔记
成员方法:通过对象调用
静态方法:通过类调用
static全局的,静态方法只能放在静态方法中,普通方法生命周期小于静态方法(全局的)如协程不能在静态方法中调用
***************************环境配置与导入********************
- 导入Xlua文件到Unity工程
- 配置宏定义:添加 HOTFIX_ENABLE 到 'Edit > Project Settings > Player > Other Settings > Scripting Define Symbols'。
(注意:各平台需要分别设置) - 生成代码:执行 'XLua > Generate Code' 菜单,等待Unity编译完成。
- 注入:执行 'XLua > Hotfix Inject In Editor' 菜单。注入成功会打印 'hotfix inject finish!' 或者 'had injected!' 。";
- 按提示导入Tools文件夹,必须是英文路径
*************************lua虚拟环境搭建*********************************
-
[code]using System.Collections; using System.Collections.Generic; using UnityEngine; using XLua; using System.IO; public class HotFixScript : MonoBehaviour { private LuaEnv LuaEnv; // Use this for initialization void Start () { //第一步 LuaEnv = new LuaEnv(); //第二步 LuaEnv.AddLoader(MyLoader); //第三步 具体执行哪一个文件 LuaEnv.DoString("require'Fish'"); //lua命令 } // Update is called once per frame void Update () { } //自定义Loader private byte[] MyLoader(ref string filePath) //传入文件路径 { string absPath = @"E:\XluaPractice\FishingJoy\HotFixScripts\" + filePath + ".lua.txt"; return System.Text.Encoding.UTF8.GetBytes( File.ReadAllText(absPath)); //读取文件 } private void OnDestroy() { LuaEnv.Dispose(); //释放虚拟环境 } }
创建的lua文件
[code]print ('123')
使用建议
- 对所有较大可能变动的类型加上Hotfix标识;
- 建议用反射找出所有函数参数、字段、属性、事件涉及的delegate类型,标注CSharpCallLua;
- 业务代码、引擎API、系统API,需要在Lua补丁里头高性能访问的类型,加上LuaCallCSharp;
- 引擎API、系统API可能被代码剪裁调(C#无引用的地方都会被剪裁),如果觉得可能会新增C#代码之外的API调用,这些API所在的类型要么加LuaCallCSharp,要么加ReflectionUse;
*****************************************************************范例****************************************************************************
- 引入命名空间 using XLua;
- 打标签 [Hotfix]
- 如果Lua会用到C#里的方法,需要在方法前加上[LuaCallCSharp]
*************************************************************改变一个私有类型的变量******************************************************
- 只赋值的时候不用打LuaCallCsharp标签
**************************************************************补丁打在什么位置********************************************************
- Awake函数内
- 如果在Start里,那么要更新Start函数就不会执行
******************************************************只修改方法体内部分代码************************************************
(先执行已有逻辑,在执行新加逻辑)
- 引入util文件,定义为变量方便使用 local util=require 'util'--导入库文件,类似引入命名空间(平级目录)
- 用util.hotfix_ex(CS.ClassName,'方法名',function(self) Self.方法名(Self) Self.属性=??? end)调用
- 释放时还是使用xlua.hotfix(CS.ClassName,'方法名',nil)
******************************************************************带参数的方法**************************************************
- util.hotfix_ex(CS.ClassName,'方法名',function(self,参数名) Self.方法名(Self,参数名) 函数体 end)
- --传递进来的参数不用加self
*************************************************************多重载函数***********************************************************
UnityEngine.Random.Range多重载函数回取到浮点类型可以用UnityEngine.Mathf.Floor向上或向下取整
*********************************************************在网络加载AB包*****************************************************
- 需要在协程中加载
- 静态方法不能开启协程
[code]using UnityEngine.Networking; public void LoadResource(string resName, string filePath) //第一个参数是想要加载的预制体的名字,第二个参数是想要加载的文件路径 { StartCoroutine(LoadResourceCorotine(resName,filePath)); } IEnumerator LoadResourceCorotine(string resName, string filePath) { //发送请求 UnityWebRequest request= UnityWebRequestAssetBundle.GetAssetBundle(@"http://localhost" + filePath); //下载到request对象里 yield return request.SendWebRequest(); //下载到的内容 AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle; GameObject gameObject = ab.LoadAsset<GameObject>(resName); //放到什么地方 prefabsDic.Add(resName, gameObject); }
- XLUA的热更新example运行的笔记
- Lua学习笔记-热更新(一)
- lua开发中的一些小笔记(持续更新)
- python学习笔记--随时更新
- XLua笔记-将lua项目和unity工程放到VS中
- 8.lua学习笔记:协程
- [寒江孤叶丶的Cocos2d-x之旅_13]Cocos2d-x 3.2版本以上LUA脚本加密解决方案【12.19更新】
- Ubuntu笔记(持续更新)
- Bugly Android热更新使用笔记
- 编译原理之学习 lua 1.1 笔记 (二) 函数调用与局部变量
- Lua学习笔记六——package
- 开发的一系列注意事项笔记(持续更新)
- lua游戏开发实践指南学习笔记2
- Sqlserver 笔记 持续更新
- Quick cocos2dx-Lua(V3.3R1)学习笔记(九) ---- 事件篇之单点触摸事件,让我们用精灵模仿一个按钮吧
- lua学习笔记(1) --Lua基础语法
- 模式识别 学习笔记:第四章 线性分类器 (持续更新中。。。)
- Win32Asm学习笔记[不断更新]
- Mongodb 笔记02 创建、更新和删除文档
- [置顶] Java HashMap学习笔记(持续更新)