Eventos

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

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.Part
local touchedPart = part.Touched:Wait()
print("The part was touched by", touchedPart:GetFullName())

Outros tipos de eventos

  • Eventos vinculáveis

    Eventos vinculáveis permitem que você se comunique entre scripts no mesmo lado da fronteira cliente-servidor.

  • Eventos remotos

    Eventos remotos permitem que você se comunique até a fronteira cliente-servidor.