LuaFramework升级笔记
本文首发于知乎专栏:MACK的游戏开发笔记,欢迎各位关注。
目前在开发一款MOBA类射击游戏, 为了热更我们使用LuaFramework。除了战斗逻辑的逻辑写在Lua里,Lua,UI,导表,行为树等都使用了热更,和王者荣耀类似。一开始使用了SimpleFramework,但是SimpleFramework已经不进行维护了,新的lua框架更合理高效一些也刚好要支持64位就抽空升级了一下。因为对源码做了一些修改,所以有会有一些调整,这里是一些笔记和备忘。
- Plugin目录下单独建了一个目录放Lua的dll
- 升级了LuaEncode目录,升级了Lua库
- LuaFramework把Editor Examples Lua
ToLua迁移到了LuaFramework目录 - Scripts改名为LuaScripts
- 这些dll需要指定平台
- 网络下的LuaNetCoroutine里面的LuaCoroutine和新版本的重名,并且编译不过要修改SimpleFramework
- D:\WorkS\MGame\mgame\Program\trunk\Client\Assets\Scripts\LuaScripts\Utility
- 这个目录下的很多文件改了,并且自定义了一些
string
sourceDir = AppConst.FrameworkRoot + "/ToLua/Source/Generate/";
string
sourceDir = AppConst.LuaWrapPath;
- LuaClient里少了定义
UNITY_5_5
using
UnityEngine.SceneManagement;
然后改了之后还需要自动升级到5.5代码
- msgobj里面用了ByteBuffer,但是这个被人改成了在MobaNet下面了,新的是LuaFramework
- PanelManager.cs需要升级
- MobaGame.Framework.Message重名了
- 新加了MGameUtils不和Lua的混在一起,一些全局变量读常量表
- 替换音效管理器StartUpCommand里加AppFacade.Instance.AddManager<SoundManager>(ManagerName.Muisc);
- AppConst.cs有比较大的修改
- ResourceManager有大幅修改,支持热更
- GameManager有大幅修改
- ResManager.Initialize();去掉了
- LuaBehaviour.cs大幅修改,增加了自己UI管理器
- D:\WorkS\MGame\mgame\Program\trunk\Client\Assets\Scripts\LuaFramework\Editor\Packager.cs大幅修改
- ToLuaMenu.AutoGen();增加自动生成的功能。
- 默认的Lua文件保存位置
"D:/WorkS/MGame/mgame/Program/trunk/Client/Assets/com.Lilith.MOBA3/ToLua/Source/Generate/"
- ToLuaMenu下的beCheck这个是用来控制是否自动检测wrap目录没有文件,如果没有文件自动生成
- AppConst下的FrameworkRoot是Framwork的根目录,D:/WorkS/MGame/mgame/Program/trunk/Client/Assets/com.Lilith.MOBA3修改为D:/WorkS/MGame/mgame/Program/trunk/Client/Assets/Scripts/LuaFramework
- AppView下的输出都干掉了
- GameManager大幅修改
- LuaLoader.cs大幅修改,这里必须要改因为涉及到读取方式
- LuaManager的InitLuaBundle修改,因为加载问题
- D:\WorkS\MGame\mgame\Program\trunk\Client\Assets\LuaFramework\Lua\Common
define修改很多自己的接口
- D:\WorkS\MGame\mgame\Program\trunk\Client\Assets\LuaFramework\Lua\Controller
全部覆盖
- GameManager改到Game
- CustomSetting里面添加很多Mgame的导出宏
- Lua的协议目录
D:\WorkS\MGame\mgame\Program\trunk\Client\Assets\LuaFramework\Lua
protobuf.lua
- D:\WorkS\MGame\mgame\ProgrConfigMgr.luaam\trunk\Client\Assets\LuaFramework\Lua\Base我加的用来读表的ConfigMgr.lua
- D:\WorkS\MGame\mgame\Program\trunk\Client\Assets\LuaFramework\Lua\Logic
- CtrlManager有修改
- GeniusGtrl的278行list
- list的是count改为Count
- 字典的是[]改为get_Item
- D:\WorkS\MGame\mgame\Program\trunk\Client\Assets\Scripts\LuaScripts\Network\ByteBuffer.cs 增加LuaByteBuffer等几个接口
- 一些路径修改
Util.DataPath
"D:/WorkS/MGame/mgame/Program/trunk/Client/Assets/StreamingAssets/"
Application.streamingAssetsPath
"D:/WorkS/MGame/mgame/Program/trunk/Client/Assets/StreamingAssets/"
"D:/WorkS/MGame/mgame/Program/trunk/Client/Assets/LuaTemp/"
- Package路径改回来
- D:\WorkS\MGame\mgame\Program\trunk\Client\Assets\Scripts\LuaScripts\Controller\Command\StartUpCommand.cs这个也改了不少,否则report起不来
PS:就性能来说Lua的性能还是不错的,开销比较高的往往是C#到Lua层的开销。我们游戏射速和战斗激烈程度比王者荣耀还有高出很多倍,因此战斗部分还是更追求性能和效率放到C#层,所有系统UI逻辑等放到Lua里支持热更。当时还跑了一下性能对比: