LuaFramework升级笔记

发表于2018-02-03
评论0 3.8k浏览

本文首发于知乎专栏: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里支持热更。当时还跑了一下性能对比:


如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引