【UGF】(五) GameFramework集成tolua热更框架

此博文基于环境:Unity 2017.4.0f1 & tolua-1.0.7.392 & UnityGameFramework 3.1.1

GitHub上有个GF集成tolua的示例,地址:https://github.com/GarfieldJiang/UGFWithToLua

打开示例,并导入GF框架,如果不出意外的话一定会有报错。

报错如图:

【UGF】(五) GameFramework集成tolua热更框架_第1张图片

OK, 还算给力,报错不是很多。

报错提示没有using SceneManagement的名字空间,打开报错代码:

【UGF】(五) GameFramework集成tolua热更框架_第2张图片

这里定义了Unity 5.4及以上版本则执行,但是前面写的却是一脸懵逼,把UNITY_5改为UNITY_5_4_OR_NEWER


改完之后这两个报错就被消灭了,不出意外的话还会有一堆报错:

【UGF】(五) GameFramework集成tolua热更框架_第3张图片

好了,以上纯属是为了浪费各位看官的时间,凭什么我踩过的坑你们就想跳过?

以下进入正题:

这个UGFWithToLua应该是很古老了,用的GF和tolua版本都很低,对Unity新版本不兼容。

坑么卑鄙勒死狗,最新tolua免费奉上拿走不谢:https://github.com/topameng/tolua

【UGF】(五) GameFramework集成tolua热更框架_第4张图片

把Assets改个名然后导入到项目Assets目录下:

【UGF】(五) GameFramework集成tolua热更框架_第5张图片

配置LuaConst.cs中的luaDir, toluaDir:

public static string luaDir = Application.dataPath + "/tolua_1_0_7/Lua";
public static string toluaDir = Application.dataPath + "/tolua_1_0_7/ToLua/Lua";

配置CustomSetting.cs中的saveDir,toluaBaseType

public static string saveDir = Application.dataPath + "/tolua_1_0_7/Source/Generate/";    
public static string toluaBaseType = Application.dataPath + "/tolua_1_0_7/ToLua/BaseType/"; 

然后还会有报错,这是因为LuaComponent使用了旧版本的tolua API,旧版tolua DoString()和DoFile()返回值为object[],而新版本返回void:

【UGF】(五) GameFramework集成tolua热更框架_第6张图片

把LuaComponent的DoString、DoFile方法改为:

public void DoString(string chunk, string chunkName = "")
        {
            if (string.IsNullOrEmpty(chunkName))
            {
                m_LuaState.DoString(chunk);
            }

            m_LuaState.DoString(chunk, chunkName);
        }

public void DoFile(string fileName)
        {
            m_LuaState.DoFile(fileName);
        }

接着还会有报错,原因是ProcedureLunch.cs中使用了旧版GF的API,需要把EventId.ResourceInitComplete改为ResourceInitCompleteEventArgs.EventId

OK,大功告成,运行:

【UGF】(五) GameFramework集成tolua热更框架_第7张图片

test.lua成功执行,但是gf框架报了一个错让人很不爽,这是gf 3.1.1的一个bug, 在SettingComponent完成初始化之前有地方调用了它的GetBool()函数,解决方法是把SettingComponent的Start方法改个名,放在Awake中调用。

Over!

你可能感兴趣的:(Unity游戏框架)