需求环境
通常在项目中我们会使用MVC的方式去构建界面框架,而以往我们也会使用NGUI,UGUI,或者DaikonGUI等等方案去实现界面的搭建。
这些UI方案各有优点,也都适用于我们的工程,但在实际项目中,热更新的逻辑代码意味着游戏界面也需要热更新,如果能有一种界面架构可以实现界面与代码的分离,实现热更新,并且代码逻辑本身也能热更新,那么就再好不过了。
于是,FairyGUI就由此诞生,FairyGui有自己单独的编辑器,编辑出的配置文件仅仅以资源的方式存在于Unity中,并且它支持Lua语言的脚本逻辑,也就是说,如果我们使用之前配置好的sLua加上FairyGUI,就可以实现从逻辑到界面的全部热更新。
插件信息
官网:http://www.fairygui.com/
插件在主页中有文字教程也有视频教程,我们这里仅仅针对【解决方案】系列做一些准备工作与测试。
在继续下面的内容之前,确保你已经了解了sLua引用外部接口的流程,也确保你至少看过了FairyGUI基础教程。
暴露Lua接口
插件本身提供了Lua接口的暴露方式,不过我们使用的是sLua,所以需要按照sLua的方式来把插件的Lua接口生成出来。
首先找到CustomExport.cs 文件,这是sLua的暴露接口的自定义脚本,我们在其中加入FaityGui的DDL或者命名空间。
1
2
3
4
5
6
7
8
|
public
static
HashSet OnAddCustomNamespace()
{
return
new
HashSet
{
//"NLuaTest.Mock"
"DJLuaTools"
};
}
|
然后按照sLua的流程,在Unity菜单种选择生成用户自定义的Lua接口。
或者
完了以后,你会得到一个惊喜,那就是:报错!
这样的错误是因为FairyGui用到了一些U3D的类在sLua中没有做特殊处理,把它们都当作了不能为空的类型。
类似的错误还有几个,只用把前面的Nullable去掉就好。
可以使用替换来简化这样的操作。经过几次替换后,报的错误也就消失不见了,此时就代表着我们可以在sLua中调用FaityGUI的代码。
测试
做个按钮与标签
通过FairyGUI的编辑器,假设我希望有一个界面,上面有一个按钮与图片,当我点击这个按钮时,图片的内容有所改变。
这只是一个很小的功能,但测试Lua+FairyGUI的接口显然是足够了。