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