跳至正文
版本:latest - a1.147.x ⚖️

事件指南

关于事件你需要了解的一切。

类事件

在 nanos world 中,玩家或实体执行的所有操作都可以通过事件来获取。

最基本的事件例子是 Spawn(生成)。 每当实体生成时,都会触发 Spawn 事件。

订阅类事件

使用 :Subscribe() 方法注册事件非常简单直接。例如,我们想在有玩家加入服务器时获得通知:

Player.Subscribe("Spawn", function(player)
Console.Log(player:GetName() .. " has joined!")
end)
信息

大多数事件都会在客户端和服务器端同时触发,只有少数极个别的例外情况,这些例外会受到可用性的限制。

退订类事件

目前有两种退订事件的方法:

信息

注意: 退订事件将始终只会注销在您当前 Package 中注册的事件。

退订所有事件

-- 这将注销在此 Package 中注册的所有 Player 的 "Spawn" 事件
Player.Unsubscribe("Spawn")

退订特定的事件回调

-- 提前声明回调函数
function OnSpawnPlayer(player)
Console.Log(player:GetName() .. " has joined!")
end

-- 订阅事件并传入回调
Player.Subscribe("Spawn", OnSpawnPlayer)

-- 再次订阅同一个事件
Player.Subscribe("Spawn", function(player)
Console.Log(player:GetName() .. " has joined again!")
end)

-- 仅退订第一个回调
Player.Unsubscribe("Spawn", OnSpawnPlayer)

-- 这将继续触发 "player has joined again",但不再触发
-- "player has joined"

实体事件

在 nanos world 中,您也可以为特定实体注册事件。这样一来,只有当该特定实体成为事件触发原因时,才会触发回调。

订阅实体事件

-- 生成一个 Character
local my_character = Character()

my_character:Subscribe("EnterVehicle", function(self, vehicle)
-- my_character 进入了载具
end)
提示

请注意,一旦实体被销毁,为该实体注册的所有事件都会自动注销!

退订实体事件

目前有两种退订事件的方法:

信息

注意: 退订事件将始终只会注销在您当前 Package 中注册的事件。

退订所有实体事件

-- 这将注销在此 Package 中注册的该特定 Character 的所有 "EnterVehicle" 事件
my_character:Unsubscribe("EnterVehicle")

退订特定实体事件回调

-- 提前声明回调函数
function OnCharacterEnteredVehicle(character, vehicle)
-- 进入了载具!
end

-- 订阅事件并传入回调
my_character:Subscribe("EnterVehicle", OnCharacterEnteredVehicle)

-- 再次订阅同一个事件
my_character:Subscribe("EnterVehicle", function(character, vehicle)
-- 再次进入了载具!
end)

-- 仅退订第一个回调
my_character:Unsubscribe("EnterVehicle", OnCharacterEnteredVehicle)

自定义事件

在 nanos world 中,可以定义和调用自定义事件。 技术文档请参考 Events 静态类。

自定义事件是由用户创建的事件,您可以向所有其他 Package 订阅或调用这些事件。