xLua增加第三方lua库lpack

因为网络通讯使用自定义协议,需要用到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!则成功集成

你可能感兴趣的:(unity)