事件

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

事件是您可以听到和响应的体验内的发生。许多 Roblox 服务和对象具有内置事件,这些事件会在响应特定操作或更改时自动 发生

例如,玩家触摸 Character 触摸 BasePart 会自动触发一个 Touched 事件。每次玩家加入您的体验时, 1> Class.Players.PlayerAdded1> 事件都会触发。

由于Roblox脚本的大量事件和客户端-服务器架构,脚本常常被称为 事件驱动 。 此方法与许多其他游戏引擎不同,它们强调在框架层次基础上运行代码。

您不需要听到事件或作出任何反应,但是事件正在发生,您可以使用它们。当您想要回应事件时,您将函数连接到它。

连接函数到事件

您使用 Connect() 将函数连接到事件,以便在事件发生时执行代码。大多数事件都会将参数传递给它们的连接函数。例如, BasePart.Touched 事件将触摸到的部体验 (例如

下面的代码示例显示了如何将名为 onPartTouched() 的函数连接到 Touched 事件的零件:


-- 假设脚本是父级的
local part = script.Parent
-- 您想要运奔跑的函数
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- 连接函数到零件的触摸事件
part.Touched:Connect(onPartTouched)

您还可以在需要使用变量在父级范围中,不需要在其他地方使用函数时,连接 匿名函数 到事件。例如,此代码示例避免了类似样本在 服务 中的奇怪中间函数。


local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SaveManager = require(ReplicatedStorage:WaitForChild("SaveManager"))
local function saveProgress(character)
local position = character:FindFirstChild("HumanoidRootPart").Position
SaveManager.saveData(character, position)
end
-- 一个匿名函数,当角色被移除时调用 saveProgress()
-- 从体验(在这个例子中,当玩家离开)。
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)

从事件中关闭功能

Datatype.RBXScriptSignal.Connect()|Connect() 方法将一个 RBXScriptConnection 对象返回。如果您将一个函数连接到一个事件,但不想在下次事件触发时调用该函数(例如满足某些条件),请将其解除连接,通过在 Datatype.

下面的代码示例显示了如何连接和拆除函数从 Part.Touched 事件:


local part = workspace.Part
local targetPart = workspace.TargetPart
-- 为连接声明一个空的替换变量
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- 连接中断
connection:Disconnect()
end
end
-- 将上述功能连接到触摸事件
connection = part.Touched:Connect(onPartTouched)

如果您只想要将函数连接到事件一次—那是, 只要在事件触发时第一次运行函数—使用 Once() 方法作为函数连接和解除的更便利的替代方案。

等待事件发生

如果您想要在特定事件发生之前生成脚本,请使用 Wait() 方法。此方法返回事件的参数,您可以将其分配给变量以便在后续使用:


local part = workspace.Part
local touchedPart = part.Touched:Wait()
print("The part was touched by", touchedPart:GetFullName())

其他类型的事件

  • 可绑定的事件

    可绑定的事件可以让您在客户端-服务器边界的两侧之间通信。

  • 远程事件

    远程事件允许您通过客户端-服务器边界 通信