虚幻4 UnLua调试教程
- 0、写在前面
- 1、下载所需环境
-
- UnLua
-
- UnLua简述
- 查看UnLua中的Lua版本
- Lua
- LuaSocket
- LuaPanda
- 整理
-
- 已准备的环境
- 调试
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)
endreturn 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
文件的首部。