事件是您可以聆聽並回應的體驗內的發生。許多 Roblox 服務和對象具有內置事件,當受到特定操作或變更的觸發時會自動發生 火焰 。
舉例來說,一個玩家的 Character 碰觸 BasePart 會自動發射 Touched 事件。每次玩家加入您的體驗時, 2>Class.Players.PlayerAdded2> 事件都會發射。
由於大量事件和客戶端-伺服器架構,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 對物件。如果您連接了一個函數到一個事件,但不想在下次事件發生時召用該函數 (例如在某些條件下),請將它解開,物件 <
下列代碼示範了如何連接並從 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.Partlocal touchedPart = part.Touched:Wait()print("The part was touched by", touchedPart:GetFullName())