资讯详情

UnLua 入门:用 Lua 替换蓝图逻辑

📅 2026/10/21 20:18:54 | 华诺云谱 👁 阅读
UnLua 入门:用 Lua 替换蓝图逻辑
UnLua 入门用 Lua 替换蓝图逻辑【免费下载链接】UnLuaA feature-rich, easy-learning and highly optimized Lua scripting plugin for UE.项目地址: https://gitcode.com/GitHub_Trending/un/UnLua你在做 UE 项目想把蓝图里的部分逻辑换成可热维护的脚本UnLua 作为 UE 的 Lua 脚本插件绑定一次蓝图后这些逻辑就写在Content/Script下的.lua文件里不用重写 C。它替你省掉了什么蓝图逻辑不用动 C蓝图里定义的 UFUNCTION 事件和函数在 Lua 里声明同名方法即可接管需要保留原实现时通过self.Overridden.{函数名}(self, ...)调回蓝图版本。反射对象直接访问UCLASS、UPROPERTY、UFUNCTION、USTRUCT、UENUM 在 Lua 侧全部可用不需要手写胶水代码。容器零转换TArray、TSet、TMap 直接读写Lua Table 与引擎容器之间不做拷贝转换。第一次跑起来UnLua 最小可行路径前置条件一个 UE 4.17 至 5.x 的工程。新建工程时选 C 项目而不是蓝图项目否则安装后打开工程会报could not be compiled见后文容易卡住的三个点。安装动作把本仓库的Plugins目录整体复制到你的工程根目录重新启动工程。验证信号打开任意蓝图编辑器工具栏出现 UnLua 分组且带 Bind 按钮说明插件已加载。然后做三件事顺序不能乱点 Bind 选Implement UnLuaInterface或在 Class Defaults 面板的 Implement Interface 里添加 UnLuaInterface给蓝图挂上接口。下图是 Class Settings 中勾选接口的操作位置实现接口要求的GetModule Name函数Return Value 填 Lua 脚本路径相对Content/Script如GameModes.BP_MyGameMode点 Bind 时按住Alt可以自动回填这个路径然后编译并保存蓝图。下图是GetModule Name函数的接法在 UnLua 工具栏选Create Lua Template按上一步的路径在Content/Script下生成对应.lua文件。下图是工具栏中的入口生成的模板长这样预置了Initialize、ReceiveBeginPlay等函数的注释骨架把模板里Initialize的注释取消写一行print(hello)运行时对象初始化处看到输出最小路径就跑通了。蓝图与 UnLua 的协作方式绑定、覆写与钩子绑定脚本文件的最小形态绑定成立需要三件事对齐蓝图实现了接口、GetModule Name返回了脚本路径、对应路径存在一个返回UnLua.Class()实例的脚本文件。最小完整形态如下local M UnLua.Class() function M:Initialize(Initializer) print(hello) end return M对象初始化时Initialize被调用控制台出现hello即绑定生效。事件覆写Receive 前缀与 Overridden在返回的 table 里声明Receive{事件名}或同名函数蓝图里的对应事件、函数就被 Lua 接管。要保留原实现时用Overridden调用蓝图版本function M:ReceiveBeginPlay() print(self:SayHi(world)) end function M:SayHi(name) local origin self.Overridden.SayHi(self, name) return origin .. Lua 实现 end注意Overridden调用要显式传self不能写成self.Overridden:SayHi(name)。完整写法见 02_OverrideBlueprintEvents.lua。三类钩子输入、动画、网络输入声明{KeyName}_Pressed/{KeyName}_Released动画通知声明Received_Notify网络同步声明OnRep_{变量名}RPC 声明{函数名}_Server_RPCfunction M:SpaceBar_Pressed() self:Jump() end function M:Received_Notify() return true end三类的完整示例分别在 03_BindInputs.lua、AN_FootStep.lua、ChatCharacter.lua。容易卡住的三个点新建工程打不开现象是安装插件后打开工程提示could not be compiled. Try rebuilding from source manually。原因是新建时选了蓝图项目而插件依赖 C 编译产物。解法以 C 项目重新建工程。打包后脚本加载不到现象是编辑器内正常、打包后 Lua 逻辑全部失效。原因是Content/Script没有被计入打包内容。解法在打包设置 Additional Non-Asset Directories to Package 中加入Script目录。覆写 Tick 不执行现象是ReceiveTick里写了逻辑却从不触发。原因是蓝图侧的 Tick 没有启用。解法在蓝图 EventGraph 里放一个Event Tick节点或在 C 里把bCanEverTick设为 true。接下来往哪走想弄懂为什么能覆盖读 UnLua_Programming_Guide.md 了解编程模式再读 How_To_Implement_Overriding.md 看两种覆盖机制的实现原理。想练手Content/Script/Tutorials/ 下 13 个示例覆盖输入绑定、委托、原生容器、网络同步到动画通知每个都对应Content/Tutorials下的现成关卡从01_HelloWorld改起。先让Initialize的输出稳定复现再逐个加钩子比通读文档更快建立手感。【免费下载链接】UnLuaA feature-rich, easy-learning and highly optimized Lua scripting plugin for UE.项目地址: https://gitcode.com/GitHub_Trending/un/UnLua创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑