Gli eventi sono opportunità all'interno della tua esperienza che puoi ascoltare e rispondere. Molti servizi e oggetti Roblox hanno eventi incorporati che attivano automaticamente fuoco in risposta a azioni o cambiamenti specifici.
Ad esempio, un Giocatoretocca Character che tocca un BasePart automaticamente attiva un evento Touched. Ogni volta che un giocatore si unisce alla tua esperienza, l'evento 2>Class.Players.PlayerAdded2> viene attivato.
A causa del numero enorme di eventi e dell'architettura client-server, lo scripting Roblox viene spesso riferito come event-driven . Questo approccio è diverso da molti altri motori di gioco, che enfatizzano l'esecuzione del codice su una base frame-by-frame.
Non devi ascoltare per gli eventi o intraprendere alcuna azione in risposta agli stessi, ma gli eventi si stanno attivando e sono disponibili comunque. Quando vuoi rispondere a un evento, connetti una funzione a esso.
Connessione delle funzioni agli eventi
Connetti una funzione a un evento utilizzando Connect() per eseguire il codice ogni volta che si attiva l'evento. La maggior parte degli eventi passa gli argomenti ai loro funzioni connesse. Ad esempio, l'evento BasePart.Touched
Il seguente codice mostra come connettere una funzione chiamata onPartTouched() all'evento Touched di una parte:
-- Assume che lo script sia parented alla parte
local part = script.Parent
-- La funzione che vuoi Eseguire
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Connetti la funzione all'evento Touched della parte
part.Touched:Connect(onPartTouched)
Puoi anche connettere funzioni anonime agli eventi quando vuoi usare le variabili nel parent scope e non devi usare la funzione in altri luoghi. Ad esempio, questo esempio di codice evita la funzione intermediaria complicata dal campione simile in Servizi :
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
-- Funzione anonima che chiama saveProgress() quando un personaggio viene rimosso
-- dall'esperienza (in questo caso, quando il giocatore lascia).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)
Disconnessione delle funzioni dagli eventi
Il metodo Connect() restituisce un oggetto RBXScriptConnection . Se connetti a una funzione a un evento, ma non vuoi chiamare la funzione la prossima volta che si attiva un evento (ad esempio dopo che alcuna condizione è soddisfatta), disconect
Il seguente codice mostra come connettersi e disconnettersi da una funzione nell'evento Part.Touched :
local part = workspace.Part
local targetPart = workspace.TargetPart
-- Dichiarare una variabile di placeholder vuota per la connessione
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Disconnetti la connessione
connection:Disconnect()
end
end
-- Connetti la funzione sopra descritta all'evento Touched
connection = part.Touched:Connect(onPartTouched)
Se vuoi connettere una funzione a un evento solo una volta—cioè, esegui la funzione solo la prima volta che si attiva l'evento—utilizza il metodo Once() come alternativa più conveniente per connettere e disconnettere la funzione.
In attesa che gli eventi si attivino
Se vuoi un script per produrre fino a quando non si attiva un evento specifico, usa il metodo Wait(). Questo metodo restituisce gli argomenti dell'evento, che puoi assegnare alle variabili per un uso futuro:
local part = workspace.Partlocal touchedPart = part.Touched:Wait()print("The part was touched by", touchedPart:GetFullName())
Altri tipi di eventi
Gli eventi legabili ti consentono di comunicare tra gli script sullo stesso lato della frontiera client-server.
Gli eventi remoti ti consentono di comunicare tra la frontiera client-server.