Skip to content

EventService ​

EventService 事件系统服务,提供事件的注册、注销与触发能力,用于编辑器插件之间的消息通信和编辑器事件监听。

概览 ​

EventService 是事件系统服务,围绕事件名提供统一的注册、注销与触发能力。它支持持久监听与一次性监听两种注册方式,并返回监听标识用于后续精确注销,同时可以按事件名查询是否存在监听者以及监听数量。借助这些能力,各模块或插件之间无需直接持有对方引用即可完成消息通信与事件响应。

Get by:

lua
-- @runtime editor
local service = editor:GetService("EventService")

函数 ​

On ​

注册事件回调:为指定事件名绑定一个回调函数,并返回该注册的 Int 类型注册 ID。

参数

参数类型说明
eventNameString事件名称
callbackFunction事件回调函数

返回值

类型说明
Int注册ID(用于取消注册)

注册并移除自己的事件监听

lua
-- @runtime editor
local events = editor:GetService("EventService")
local eventName = "se_doc_example_event"
local listenerId = events:On(eventName, function(payload)
    print("事件数据:", payload)
end)
events:Fire(eventName, { value = 1 })
events:Off(eventName, listenerId)

Once ​

为指定事件注册单次监听;首次触发后自动注销,返回监听 ID。

参数

参数类型说明
eventNameString事件名称
callbackFunction事件回调函数(触发一次后自动注销)

返回值

类型说明
Int注册ID

注册并触发一次性监听

lua
-- @runtime editor
local events = editor:GetService("EventService")
local eventName = "se_doc_once_event"
events:Once(eventName, function(payload)
    print("首次触发:", payload)
end)
events:Fire(eventName, { value = 1 })

Off ​

取消事件回调:根据事件名与注册时得到的注册 ID,移除该事件上对应的回调监听。

参数

参数类型说明
eventNameString事件名称
listenerIdInt注册时返回的监听 ID

通过注册 ID 移除监听

lua
-- @runtime editor
local events = editor:GetService("EventService")
local eventName = "se_doc_off_event"
local listenerId = events:On(eventName, function() end)
events:Off(eventName, listenerId)

OffAll ​

取消指定事件上注册的全部回调监听。

参数

参数类型说明
eventNameString事件名称

清理文档示例事件的全部监听

lua
-- @runtime editor
local events = editor:GetService("EventService")
local eventName = "se_doc_off_all_event"
events:On(eventName, function() end)
events:OffAll(eventName)

Fire ​

触发名为 eventName 的事件,并将可选的 args 参数传递给该事件上注册的回调函数。

参数

参数类型说明
eventNameString事件名称
argsAny传递给回调的可变参数

向同名事件的监听者传递数据

lua
-- @runtime editor
local events = editor:GetService("EventService")
local eventName = "se_doc_fire_event"
local listenerId = events:On(eventName, function(payload)
    print("收到数据:", payload)
end)
events:Fire(eventName, { value = 1 })
events:Off(eventName, listenerId)

HasListeners ​

检查当前事件服务中是否存在使用指定事件名注册的监听者。传入的事件名对应一个已被监听的事件时返回 true,否则返回 false。

参数

参数类型说明
eventNameString事件名称

返回值

类型说明
Bool是否存在监听

调用 HasListeners

lua
-- @runtime editor
local eventService = editor:GetService("EventService")
local eventName = "default"  -- String
local result = eventService:HasListeners(eventName)  -- 返回 Bool
if result then
    print("调用结果为 true")
else
    print("调用结果为 false")
end

GetListenerCount ​

查询事件服务中指定名称事件当前的监听者数量。

参数

参数类型说明
eventNameString事件名称

返回值

类型说明
Int当前监听数量

调用 GetListenerCount

lua
-- @runtime editor
local eventService = editor:GetService("EventService")
local eventName = "default"  -- String
local result = eventService:GetListenerCount(eventName)  -- 返回 Int
if result ~= nil then
    print(result)
    if result ~= 0 then
        print("结果非零")
    end
end