前言
xLua在热更新上的优势
1、可以开发只用C#;
2、出Bug时采用Lua来进行热更新,下次整体更新时换回正确的C#。
可能忽略的热更新配置
-
在Unity3D的File->Build Setting->Scripting Define Symbols下添加HOTFIX_ENABLE宏菜单栏中,执行xLua/Generat Code, 会在新建Gen文件夹,下面生成一些wrap文件。
注意:
-
各个发布平台这个宏需要分别设置。
-
在代码里头用API设置的宏是不生效的,需要再编辑器设置。
-
平时开发时建议不用打开HOTFIX_ENABLE宏,只在build手机版本或者在编辑器下开发补丁时打开HOTFIX_ENABLE。
-
在项目中集成,最好自己写一份配置,替换ExampleGenConfig,比如取名CustomGenConfig.cs,加入了[Hotfix]标签。对于这样的类型映射表,需要在C#端
//需要热更新的类型
[Hotfix]
public static List<Type> by_field = new List<Type>()
{ };
热更新实现逻辑
-
游戏启动
-
优先下载读取热更新服务器上的热更新Lua文件。
-
如果没有则读取本地的热更新Lua文件。如果不存在则说明不需要热更新。
-
项目发布前
在自定义的Lua与C#类型映射表,加入需要添加【Hotfix】标签的类型。
Tip:只有加上【Hotfix】标签的类型才可以调用xLua.hotfix()。
使用步骤简述
-
在开启HOTFIX_ENABLE宏后,菜单XLua下就出现Hotfix Inject in Editor子菜单。
-
分别创建两个脚本,分别是C#脚本和Lua脚本(lua脚本放在什么位置取决于项目中定义的loader)。
-
在C#脚本中编写TestHotFix类,打上[Hotfix]标签
-
在Lua脚本中编写如下代码
local GameObject=CS.UnityEngine.GameObject
local deltime=CS.UnityEngine.Time.deltime
local cube=GameObject.Find(‘go’)//试用GameObject类获得名为go的对象。
xlua.hotfix(CS.TestHotFix, ‘FuncName’, function(self) //可以调用C#脚本中TesetHotFix类的名为FuncName的函数。
cube.transform.rotation=cube.transform.rotation*CS.UnityEngine.Quaternion.Euler(0,1,0)
end)
最终:
执行CLear Generated Code----Generate Code----Hotfix Inject In Editor。这样就是一个通过xLua来进行热更新的基础流程描述。
具体实践还没有操作过,希望能够有机会实践再进一步修改此文档。