Eventos são ocorrências dentro de sua experiência que você pode ouvir e responder. Muitos serviços e objetos Roblox têm eventos incorporados que automaticamente fire em resposta a ações ou mudanças específicas.
Por exemplo, um jogador tocando em um Character``Class.BasePart ativa automaticamente um evento Touched. Cada vez que um jogador se juntar à sua experiência, o evento 2>Class.Players.PlayerAdded2> é acionado.
Devido ao número enorme de eventos e arquitetura cliente-servidor, o scripting do Roblox é muitas vezes referido como event- driven . Essa abordagem difere de muitos outros motores de jogos, que enfatizam a execução de código em uma base de Frame-by-Frame.
Você não precisa ouvir eventos ou fazer qualquer ação em resposta a eles, mas os eventos estão acontecendo e disponíveis, no entanto. Quando você quiser responder a um evento, você conecta uma função a ele.
Conectando Funções a Eventos
Você conecta uma função a um evento usando Connect() para executar o código sempre que o evento é acionado. A maioria dos eventos passa argumentos para suas funções conectadas. Por exemplo, o evento BasePart.Touched conecta o experiência
O seguinte código de exemplo mostra como conectar uma função chamada onPartTouched() ao evento Touched de uma parte:
-- Supõe que o script está ligado à parte
local part = script.Parent
-- A função que você deseja executar
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Conecte a função ao evento Touched da peça
part.Touched:Connect(onPartTouched)
Você também pode conectar funções anônimas a eventos quando quiser usar variáveis no âmbito de pais e não precisar usar a função em outro lugar. Por exemplo, este código de exemplo evita a função intermediária embara do exemplo similar em Serviços :
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
-- Função anônima que chama saveProgress() quando um personagem é removido
-- da experiência (neste caso, quando o jogador sai).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)
Desconectando Funções de Eventos
O método Connect() retorna um ObjetoRBXScriptConnection. Se você conectar uma função a um evento, mas não quiser chamar a função na próxima vez que um evento for disparado (como após alguma condição ser atendida), desconecte-a ao Objeto
O seguinte código de exemplo mostra como conectar e desconectar uma função do evento Part.Touched:
local part = workspace.Part
local targetPart = workspace.TargetPart
-- Declare uma variável de espaço reservado vazia para a conexão
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Desconecte a conexão
connection:Disconnect()
end
end
-- Conecte a função acima ao evento Touched
connection = part.Touched:Connect(onPartTouched)
Se você só quiser conectar uma função a um evento uma vez — isso é, apenas executar a função a primeira vez que o evento é acionado — use o método Datatype.RBXScriptSignal.Once()|Once() como uma alternativa mais conveniente para conectar e desconectar a função.
Esperando por eventos para disparar
Se você quiser que um script gere até um evento específico, use o método Wait(). Este método retorna os argumentos do evento, que você pode atribuir às variáveis para uso posterior:
local part = workspace.Partlocal touchedPart = part.Touched:Wait()print("The part was touched by", touchedPart:GetFullName())
Outros tipos de eventos
Eventos vinculáveis permitem que você se comunique entre scripts no mesmo lado da fronteira cliente-servidor.
Eventos remotos permitem que você se comunique até a fronteira cliente-servidor.