前言
为什么会有这个热更新方案?主要是现在网上的Unity热更新方案太复杂麻烦了,如果是C#开发者转tolua开发学习难度较大,基本上原来的开发流程都改变了。但是考虑了一下感觉完全没必要,Unity主要就是C#脚本无法热更吧,那就直接使用Lua脚本一对一替换C#脚本不就好了,只是语言上的改变,游戏开发逻辑流程完全不用更改。所以就出现了这个框架,优点就是简单,Lua脚本一对一替换C#脚本。
组件检查器替换
例如,原来的C#组件脚本GameManager
检查器:
替换为的LuaMonoBehaviour
组件,并添加对应配置属性:
组件实现替换
实现上就是把C#组件脚本的代码使用Lua重新写一遍
例如,C#组件脚本的代码:
public class GameManager : MonoBehaviour
{
private void Start()
{
// Lua有更方便的协程处理方式,这里在Lua中不需要
m_StartWait = new WaitForSeconds(m_StartDelay);
m_EndWait = new WaitForSeconds(m_EndDelay);
SpawnAllTanks();
SetCameraTargets();
StartCoroutine(GameLoop());
}
...
}
那么翻译为 Lua组件脚本代码:
local GameManager = class("GameManager", require("unity.LuaMonoBehaviour"))
function GameManager:Start()
self:SpawnAllTanks()
self:SetCameraTargets()
coroutine.start(function()
self:GameLoop()
end)
end
...
return GameManager
Demo和例子工程
Unity官方Tanks项目热更新重写
lun-framework框架功能示例
lun-framework框架
lun-framework
是基于tolua的Unity热更新框架,通过使用Lua脚本组件替代C#脚本组件的方式实现热更新。因此使用此框架在开发流程上不会有改变,非常适合于习惯C#脚本组件开发流程的开发者使用此框架实现游戏的热更新功能。同样也可以把完成后的游戏通过替换脚本的方式渐进实现热更新,如此不用把所有C#脚本替换为Lua脚本就可以一步一步调试运行,避免代码修改过多调试困难。