跳至正文
版本:bleeding-edge 🩸

蓝图通信

了解如何在 Lua 和蓝图之间进行通信。

在 nanos world 中,你可以发送并订阅蓝图事件! 在本指南中,你将学习如何在蓝图和 Lua 中创建并绑定事件!

信息

所有通信仅在客户端可行! 因为服务器无法感知虚幻引擎。

蓝图事件

你可以在蓝图中创建事件(或函数),以便从 Lua 中调用它们。

创建自定义事件

打开或创建你的蓝图,进入 Event Graph(事件图表)标签页,在图表中右键单击以打开上下文操作菜单,在其中输入 Add Custom Event... 来找到该选项:

提示

你也可以创建函数来代替事件供 Lua 调用!

然后,选中你新创建的自定义事件,在 Details 面板(通常在右侧)中,你可以点击 + 为其添加新的输入,你可以添加任意数量的输入:

创建工作到此结束! 从现在开始,你可以添加任何你想要的逻辑了!

从 Lua 调用自定义事件

在 Lua 中,你可以像往常一样生成你的蓝图,并在其上调用 CallBlueprintEvent 来触发该蓝图事件。

Client/Index.lua
-- 生成蓝图
local blueprint = Blueprint(Vector(), Rotator(), "my-asset-pack::BP_AwesomeBlueprint")

local param1 = true -- 布尔值参数
local param2 = 123 -- 整型参数
local param3 = "你好呀!" -- 字符串参数

-- 调用事件并传递参数
blueprint:CallBlueprintEvent("MyBlueprintCustomEvent", param1, param2, param3)

蓝图事件分发器

事件分发器(Event Dispatchers)是在蓝图内部创建的事件,其他蓝图(或者在我们的案例中是 Lua)可以订阅它,从而在蓝图触发该事件时获得通知。

创建事件分发器

要创建它,请在左侧找到 Event Dispatchers 栏目,然后点击 + 创建一个新分发器,并将其命名为你想取的名称:

接着选中它,在 Details 面板中,你可以根据需要添加任意数量的输入/参数:

从蓝图调用分发器

现在,要在蓝图中触发它,将其从列表中拖拽到图表中,并选择 Call(调用)选项:

然后你可以接入任何逻辑来触发它,任何绑定了该分发器的其他蓝图或 Lua 都会被触发!

从 Lua 绑定分发器

你可以直接在 Lua 中绑定蓝图事件分发器! 为此,生成你的蓝图,并在其上调用 BindBlueprintEventDispatcher() 来绑定该分发器:

Client/Index.lua
-- 生成蓝图
local blueprint = Blueprint(Vector(), Rotator(), "my-asset-pack::BP_AwesomeBlueprint")

-- 订阅蓝图事件分发器
blueprint:BindBlueprintEventDispatcher("GorgeousDispatcher", function(self, arg1, arg2)
-- arg1 是字符串,arg2 是整数
Console.Log("从蓝图调用!", arg1, arg2)
end)