0、写在前面
本次教程,使用的demo为UnLua提供。下载UnLua源码后,解压出来的就是UnLua的demo工程了。
1、下载所需环境
UnLua
下载unlua:unlua仓库
UnLua简述
UnLua是由Tencent提供的,是针对虚幻运行Lua的解决方案。
查看UnLua中的Lua版本
由于后续需要编译LuaSocket,因此在此需要知道UnLua所用的Lua版本是多少。
步骤:
- 解压UnLua,打开uproject工程。
- 在任意的关卡中,例如:Tutorials/HelloWorld关卡,在Script/Tutorials目录下找到01_HelloWorld.lua,修改脚本如下。
- 运行游戏,查看控制台中Lua的版本(非常关键)。
require "UnLua"
local Screen = require "Tutorials.Screen"
local M = Class()
-- 所有绑定到Lua的对象初始化时都会调用Initialize的实例方法
function M:Initialize()
print("unlua version ===> ".._VERSION)
local msg = [[
Welcome to zzw Unreal!
]]
print(msg)
Screen.Print(msg)
end
return M
Lua
- 下载Lua环境:Lua下载官网,需要与UnLua版本一致。
- 编译Lua的动态库和静态库,此步骤自己搜索教程。
LuaSocket
- 下载LuaSocket环境:LuaSocket仓库。
- 使用刚刚编译过的Lua(要Lua版本和UnLua的版本是一致的)去编译LuaSocket。这里的坑比较多,可能会遇到UnLua版本比较高,而LuaSocket版本较低等一系列的问题。
LuaPanda
- 下载LuaPanda代码:LuaPanda仓库。
- 在VSCode中安装LuaPanda插件。
- 将LuaPanda仓库中
Debugger/LuaPanda.lua
文件拷贝到与demo中的Script/UnLua.lua
同级。
插件的launch.json配置如下:
{
"version": "0.2.0",
"configurations": [
{
"type": "lua",
"request": "launch",
"tag": "normal",
"name": "LuaPanda",
"description": "通用模式,通常调试项目请选择此模式 | launchVer:3.2.0",
"cwd": "${workspaceFolder}",
"luaFileExtension": "",
"connectionPort": 8818,
"stopOnEntry": false,
"useCHook": true,
"autoPathMode": true
},
{
"type": "lua",
"request": "launch",
"tag": "independent_file",
"name": "LuaPanda-IndependentFile",
"description": "独立文件调试模式,使用前请参考文档",
"luaPath": "",
"packagePath": [],
"luaFileExtension": "",
"connectionPort": 8820,
"stopOnEntry": true,
"useCHook": true
}
]
}
整理
已准备的环境
- Lua的静态库和动态库以及头,并且Lua的版本与UnLua版本保持一致。
- LuaSocket编译出来的socket文件夹下的core,此socket版本与UnLua版本保持一致。
- VSCode已经配置好LuaPanda环境。
- UnLua的demo中的
LuaPanda.lua
与UnLua.lua
同级。
调试
- 将
LuaSocket
编译出来的socket文件目录
拷贝到一个比较方便的地方,例如:D:/luasocket
目录下。 - 在需要被调试的lua文件中加入:
package.cpath = package.cpath .. ";D:/luasocket/?.dll"
和require("LuaPanda").start("127.0.0.1",8818)
。笔者是将这两行直接写入到UnLua.lua
文件的首部。