KSFramework:Unity3D开发框架快速入门

KSFramework是一个Unity 5 Asset Bundle开发框架和工具集,专注于运行时热重载,使用了SLua作为脚本引擎。
https://github.com/mr-kelly/KSFramework

KSFramework是一个整合KEngine、SLua和一些开发组件组成的全功能Unity 5开发框架,适合有一定规模的团队使用。

热重载是KSFramework的开发重点——在不重启游戏的前提下,重载代码、配置表可立刻看到修改效果,最大限度的提升开发、调试的速度,并且在运营阶段方便的进行产品热更新。

看看Demo!

双击打开Assets/Game.unity场景,点击播放。

这时候KSFramework的默认Demo开始,做了这些事情:

  • 基础模块的启动
  • Lua模块的启动
  • 尝试读取并打印Excel表格GameConfig.xlsx内容
  • 加载UI界面Login
  • 执行UI界面Login的Lua脚本
  • Lua脚本绑定UI控件、设置UI控件
  • Lua脚本读取并打印Excel表格GameConfig.xlsx内容

总而言之,这个Demo囊括了KSFramework中的几个核心模块的使用:

  • KEngine中的Setting模块的使用
  • KEngine中的UI的资源加载
  • SLua脚本引擎与UI的联合

接下来,将模仿这个Demo,创建/加载一个新的UI界面、创建/读取一个新的配置表格。

尝试做一个公告界面Billboard

接下来,我们将创建一个UI公告牌(Billboard),使用Lua脚本,并从配置表读取公告内容。

创建UI资源

加载UI界面

好了,Billboard界面创建好了,也导出成了AssetBundle。
接下来,我们通过代码打开界面。

在OnFinishInitModules函数的末端,加上这样的一句:

// 开始加载我们的公告界面!
UIModule.Instance.OpenWindow("Billboard");

完成。 打开场景Assets/Game.unity,点击播放按钮:

[我们的UI通过AssetBundle打开了,弹出提示找不到UI Lua脚本,接下来我们创建Lua脚本吧。

创建Lua脚本

local UIBase = import("KSFramework/UIBase")

local UIBillboard = {}
extends(UIBillboard, UIBase)

function UIBillboard:OnInit(controller)
    self.Controller = controller
    self.TitleLabel = self:GetUIText('Title')
    self.ContentLabel = self:GetUIText('Content')
end

function UIBillboard:OnOpen()
    self.TitleLabel.text = "This is a title"
    self.ContentLabel.text = "Here is content!"
end

return UIBillboard

这段lua中,创建了一个Table叫UIBillboard,这个table必须有OnInit(controller)函数。它通过代码设置了UI中的文字。

好了,接下来,我们要为策划准备配置表了。

创建配置表

打开Product/SettingSource目录,复制一份StringsTable.xlsx,并改名叫Billboard.xlsx吧

用Excel打开我们新的Billboard.xlsx,编辑我们的公告。我们大概定一下需求,我们假设写入3条公告,每次打开公告随机显示其中一条。每个公告,我们给它一个英文ID,一列中文标题,一列中文内容。

Excel表修改如下:

公告界面完成了。我们创建了一个UI、写了C#和Lua代码加载它、然后创建了一张配置表,再从Lua读取配置表,设置UI的显示。

玩玩热重载

热重载Lua

接着我们刚才运行的Game.unity。 我们尝试一下对Lua热重载:在不重启游戏的情况,快速重载Lua代码,方便程序调试。

我们可以从菜单执行热重载并重新打开UI界面,或者使用快捷键Ctrl+Alt+Shift+R。
由于我们的Lua脚本中,每次执行随机获取一条公告。因此可以看到公告内容在不停的变动着。

热重载的实现,主要依赖于每个lua脚本的最后一行——return Table;C#层在执行完Lua脚本后,会把这个返回的Table缓存起来,每次需要使用table时,直接从缓存拿;而热重载,实际就是把这个缓存table删掉,这样当需要用到这个table时,就会重新执行Lua文件,来获取Table,这样就达到了热重载得目的。

热重载Excel表格

我们保持运行刚刚的Game.unity,不要停止掉。这时候我们去修改Excel表格。

保存后,回到Unity,提示表格有改动。

重载Lua,我们的新修改的配置表内容生效了。

至此,我们的Lua和配置表的改动,都可以在不重启、不重新转菊花的情况下快速修改。


KEngine策划指南:配置表格的编辑与编译

KEngine资源的打包、加载、调试监控

你可能感兴趣的:(Unity)