xLua增加第三方lua库lpack

来源:互联网 发布:软件风险分析 编辑:程序博客网 时间:2024/04/30 14:25

因为网络通讯使用自定义协议,需要用到luasocket和lpack库,但xLua默认只集成了luasocket库,所以需要自己增加lpack库

下载xLua C源码:https://github.com/Tencent/xLua/archive/v2.1.8.zip
lpack下载地址:http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/5.2/lpack.tar.gz

解压下载的xLua-2.1.8,把build目录放在自己unity项目的根目录下
解压下载的lpack.tar.gz,放到build目录下

添加扩展&编译

在CMakeLists.txt文件 MARK_AS_ADVANCED(XLUA_PROJECT_DIR) 行下面加入扩展
#begin lua-pack
set (PACK_SRC pack/lpack.c)
set_property(
SOURCE ${PACK_SRC}
APPEND
PROPERTY COMPILE_DEFINITIONS
LUA_LIB
)
set (THIRDPART_SRC ${THIRDPART_SRC} ${PACK_SRC})
#end lua-pack

找到自己对应的平台和版本编译,如make_win64_lua53.bat,直接双击编译
把plugin_lua53/Plugins/x86_64/xlua.dll 覆盖unity项目的Assets/Plugins/x86_64/xlua.dll

下面是使用vs2012的处理

把make_win64_lua53.bat文件里面的 cmake -G “Visual Studio 14 2015 Win64” .. 这一行修改成 cmake -G “Visual Studio 11 2012 Win64” ..
把i64lib.c文件里面的 lua_pushuint64(L, strtoull(str, NULL, 0)); 这一行修改成 lua_pushuint64(L, _strtoui64(str, NULL, 10));

C#集成

找到项目下LuaDLL.cs文件

#if UNITY_IPHONE && !UNITY_EDITOR    const string LUADLL = "__Internal";#else    const string LUADLL = "xlua";#endif

下面添加

[DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]public static extern int luaopen_pack(System.IntPtr L);[MonoPInvokeCallback(typeof(LuaDLL.lua_CSFunction))]public static int LoadPack(System.IntPtr L){    return luaopen_pack(L);}

找到项目下LuaEnv.cs文件

AddBuildin("socket.core", StaticLuaCallbacks.LoadSocketCore);AddBuildin("socket", StaticLuaCallbacks.LoadSocketCore);

下面添加

AddBuildin("pack", LuaDLL.Lua.LoadPack);

测试集成

新建Test.cs文件,内容如下

using UnityEngine;using XLua;public class Test : MonoBehaviour{    void Start()    {        LuaEnv luaEnv = new LuaEnv();        luaEnv.DoString(@"            require 'pack'            print('Hello World!')        ");        luaEnv.Dispose();    }}

运行如能输出Hello World!则成功集成

原创粉丝点击