Sequenciador de Eventos é um poderoso framework que permite que você construa eventos ao publicado/ao vivoe cenas em um sequenciamento estruturado de ações e gatilhos.Mais especificamente, este módulo ajuda você:
- Construa um evento ou cena em um framework estruturado através de configurações agendadas de áudio, animações e adolescentes.
- Transição entre várias cenas em vários servidores, sincronizando animações e visuais complexos para um cronograma.
- Procure através de um evento e pré-visualize a experiência para fins de teste e desenvolvimento.
Este framework foi testado em batalha em eventos do Roblox como o Twenty One Pilots e 24kGoldn concertos, bem como muitas experiências altamente visitadas.
Para ver Sequenciador de Eventos em ação dentro de um local editável, confira o modelo Concerto no Roblox Studio.Este modelo é um ponto de partida abrangente para os desenvolvedores criarem eventos/concertos e se familiarizarem com as várias características e componentes envolvidos.

Uso do módulo
Instalação
Para usar o EventSequencer framework em uma experiência:
Certifique-se de que a classificação Modelos está selecionada, então clique no botão Ver Todos para Categorias .
Localize e clique no tijolo Dev Modules .
Localize o módulo Sequenciador de Eventos e clique nele, ou arraste-e-solte-o para a ver3D.
Na janela Explorer, mova todo o modelo Sequenciador de Eventos para Serviço de Script de Servidor .Ao executar a experiência, o módulo se distribuirá a vários serviços e começará a funcionar.
Modos de quadro
Modo de substituição
O modo padrão do quadro é substituir modo em que você projeta cenas únicas por meio de colocar objetos 3D, terreno, propriedades de iluminação, efeitos ambientais e objetos de interface do usuário na pasta Ambiente daquela cena.Quando uma cena é carregada, esses objetos e propriedades são distribuídos em , e , substituindo os objetos/propriedades existentes para formar um espaço clonado.
Modo em linha
Um modo de quadro alternativo é modo inline no qual você similarmente projeta cenas únicas com lógica de script para seu fluxo/eventos, mas o quadro não destruirá objetos existentes 3D , terreno , propriedades de iluminação , efeitos ambientais e objetos de interface do usuário para clonar recursos/propriedades de uma pasta do ambiente da cena ao carregar.
Para habilitar o modo inline:
Dentro do modelo Sequenciador de Eventos que você colocou em Serviço de Script de Servidor , desça e selecione o valor Inline dentro da pasta ReplicatedStorage .
Na janela Propriedades, ative a caixa de seleção Valor .
Criar cenas
Uma cena é essencialmente parte de um evento geral ou uma cutscene embalada em uma série de pastas .Cada cena contém lógica de script que define seu fluxo/eventos e uma cena pode armazenar seus próprios objetos 3D, terreno, propriedades de iluminação, efeitos ambientais e objetos de interface do usuário.
Para começar rapidamente, você pode encontrar uma cena vazia dentro da pasta principal do módulo:
Expandir a pasta Sequenciador de Eventos e localizar a pasta BlankScene .
Mova ou copie toda a pasta BlankScene para Armazenamento Replicado .
Duração do tempo
Cada cena deve ter um comprimento de tempo , em segundos, definindo sua duração - assim como um filme ou um concerto tem um tempo definido.O comprimento do tempo é definido como um atributo numérico na pasta da cena chamada Tempo de Duração, que você pode definir diretamente no Studio ou programaticamente através de .


Meio Ambiente
O diretório Ambiente de uma cena contém tudo o que os usuários veem e ouvem, incluindo objetos 3D, terreno, propriedades de iluminação e efeitos ambientais, e objetos de interface de usuário.Quando uma cena é carregada, esses objetos e propriedades são distribuídos para Workspace , Terrain e Lighting , substituindo objetos/propriedades existentes para formar um espaço clonado.
A pasta Ambiente contém os seguintes contêineres:
Recipiente | Descrição |
---|---|
Cliente | Contém todos os recursos a serem carregados quando qualquer usuário (cliente) se juntar ao evento, como objetos de interface de usuário ou um rig / plataforma / equipamentode animação. |
Gerações de Jogador | Contém partes onde os usuários aparecem ao se juntar. Qualquer parte neste diretório se comporta de forma semelhante a um SpawnLocation . |
Servidor | Contém todos os recursos a serem carregados quando uma cena for criada pela primeira vez em um servidor. Recomenda-se que a maioria dos recursos visuais vá para aqui. |
Terreno | Contém terreno da cena. |
Iluminação | Contém propriedades globais de iluminação como atributos, bem como modificadores como efeitos atmosféricos e efeitos de pós-processamento. |
Eventos
O diretório de eventos de uma cena é puramente um placeholder para que se comunicam entre os módulos Cliente e Servidor.Não é um requisito colocar qualquer coisa neste diretório.
Cliente
Este script executa esquema lógica no cliente.
Servidor
Este script executa esquema lógica no servidor.
Esquemas da cena
O esquema de uma cena define o que acontece em que ponto na linha do tempo da cena .Você deve definir o esquema de uma cena em ambos os módulos Cliente e Servidor e incluir ganchos de ciclo de vida para gerenciar quando configurações ocorrer.
Ganchos de ciclo de vida
O esquema hooks de ciclo de vida permite que você gerencie quando as operações da cena ocorrem. Uma cena em produção geralmente ocorrerá no fluxo mais simples:
OnRun pode ser interrompido ao buscar:
Todos os três ganchos também podem se repetir se a cena for reproduzida:
- Na configuração → Na execução → Na cena final … replay → Na configuração → Na execução → Na cena final
Configurações
Configurações de esquema definem as operações principais de uma cena, por exemplo tocar áudio às 00:32, agendar uma animação para sincronizar com esse áudio, agendar um evento de cena como um exibir / mostrarde fogos de artifício e muito mais.Cada configuração suporta certas funções de retorno de chamada onde o primeiro parâmetro ( self ) é a instância de configuração.
Procure cenas
Uma característica única do Sequenciador de Eventos é a capacidade de "buscar" ao redor das cenas como você pode buscar através de um vídeo.No modo Substituir, você também pode alternar entre cenas para pré-visualizar um evento multiescena inteiro antes de implantá-lo na produção.
A busca de cena não é acessível a todos uma vez que os usuários simplesmente desfrutando do evento não devem ter a capacidade de controlar seu fluxo de tempo.Em vez disso, você deve conceder permissão buscando com base no evento e, também, grupos específicos e/ou papéis dentro deles.
Crie um novo Script dentro de ServerScriptService.
Cole o seguinte código no novo script.
Script - Definir busca de permissõeslocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.setSeekingPermissions({placeIDs = {},userIDs = {},groups = {{GroupID = , MinimumRankID = },}})Preencha as seguintes tabelas dentro da chamada setSeekingPermissions da seguinte forma:
placeIDs Lista delimitada por vírgula de PlaceId valores para suporte de busca dentro. userIDs Lista delimitada por vírgula de UserIds para aqueles que podem buscar nos locais suportados. groups Lista delimitada por vírgula de tabelas, cada uma contendo um ID de grupo e o rank mínimo dos membros desse grupo que podem buscar nos locais suportados.
pluginde gerenciamento de cena
O plugin Gerenciador de Cena é uma ferramenta útil para carregar e descarregar cenas, iluminação e terreno.A menos que você esteja usando Modo Inline, é altamente recomendável que você use esse plugin em vez de colocar/editar objetos e propriedades de cena manualmente.
Para instalar o plugin:
Do menu Ver do Studio, abra a Caixa de Ferramentas .
Com a aba Loja do Criador selecionada, selecione Plugins no menu suspenso.
No campo de pesquisa, digite Gerenciador de Cena e pressione Enter para localizar o plugin.
Clique no ícone do plugin para ver seus detalhes e depois clique no botão Instalar .
Uma vez que o plugin é instalado, ele aparece na aba Plugins do Studio.
Carregue e descarregue cenas
Como descrito em criar cenas, o diretório Ambiente de uma cena contém tudo o que os usuários veem e ouvem, incluindo objetos 3D.O plugin ajuda você a carregar rapidamente os recursos de uma cena para dentro ou fora de pastas organizadas dentro do espaço de trabalho.
Ação de ação | Descrição |
---|---|
Carregar Cliente | Se o conteúdo do cliente da cena for descarregado, move seu diretório Ambiente / Cliente para o diretório Espaço de Trabalho / ScenesClient . |
Carregar Servidor | Se o conteúdo do servidor da cena for descarregado, move seu diretório Ambiente / Servidor para o diretório Trabalho / ScenesServer . |
Descarregar Cliente | Se o conteúdo do cliente da cena for carregado, move seu diretório Cliente da pasta Workspace / ScenesClient de volta para a pasta [Cena] / Ambiente . |
Descarregar Servidor | Se o conteúdo do servidor da cena for carregado, move seu diretório Servidor de Workspace / ScenesServer de volta para o diretório [Cena] / Ambiente . |
Descarregar todas as cenas | Mova o diretório Cliente e Servidor de cada cena carregada de volta ao seu diretório Ambiente . |
Salvar e carregar iluminação
O serviço de alto nível Lighting armazena todas as propriedades de iluminação e efeitos visuais de um local.Como é um serviço de alto nível, você não pode movê-lo manualmente para o Ambiente / Servidor / Entorno / Cliente da pasta de uma cena específica.Em vez disso, você pode utilizar o plugin para copiar suas propriedades e filhos para o diretório Ambiente / Iluminação da cena.
Configure as propriedades de iluminação da cena e os efeitos de pós-processamento , efeitos atmosféricos e skyboxes através do serviço de nível superior.
Na janela do plugin Gerenciador de Cena , clique em Salvar Iluminação para a cena desejada.
Selecione e expanda a configuração de Ambiente / Iluminação daquela cena e você verá as mesmas propriedades de iluminação como atributos da pasta, bem como filhos clonados do serviço de nível superior Lighting.
Instâncias clonadas Atributos salvos Uma vez que as propriedades de iluminação e filhos são salvas para uma cena, você pode rapidamente carregá-los de volta ao serviço de nível superior Lighting clicando em Carregar Iluminação a partir da janela do plugin.
Salvar e carregar terreno
Como Terrain é uma classe de alto nível dentro de Workspace, você não pode mover manualmente o terreno gerado ou esculpido para um diretório Ambiente / Servidor ou Ambiente / Cliente específico.Em vez disso, você pode utilizar o plugin para copiá-lo para a pasta Ambiente / Terreno da cena.
Configure o terreno da cena através do serviço de nível superior Terreno .
Na janela do plugin Gerenciador de Cena , clique em Salvar Terreno para a cena desejada.
Selecione e expanda o diretório Ambiente / Terreno daquela cena e você verá um objeto Região de Terreno que representa o terreno salvo.
Uma vez que o terreno é salvo para uma cena, você pode rapidamente carregá-lo de volta para o serviço de nível superior Terrain clicando em Carregar Terreno a partir da janela do plugin.
Referência da API
Ganchos de ciclo de vida do esquema
Na configuração
O gancho de ciclo de vida OnSetup tem a intenção de inicializar recursos e variáveis que serão referenciados em OnRun ou OnEndScene, configurando que são destinados a durar durante a duração da cena, etc.Este gancho recebe o parâmetro timePositionObject que permite que você leia o tempo atual na configuração.
Esquema do Cliente
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local clientEnvironment
local serverEnvironment
local dummy
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
-- Ambientes de cena de acesso; não se aplica ao Modo Inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- Espere por recursos
dummy = clientEnvironment:WaitForChild("Dummy")
print("Current time is:", timePositionObject.Value)
end
Esquema do Servidor
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local serverEnvironment
local partColorConnection
local changePartColorEvent = script.Parent.Events.ChangePartColor
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Server)")
-- ambientede cena de acesso; não se aplica ao Modo Inline
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("Current time is:", timePositionObject.Value)
end
Em Execução
OnRun é o principal hook de ciclo de vida operacional dentro de um esquema.Deve conter todas as configurações temporizadas para a cena, desde jogar áudio ou uma animação até agendar um evento como um espetáculo de fogos de artifício.
Esquema do Cliente
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("Audio playing")
end,
OnEnd = function(self)
print("Audio ended")
end
})
end
Na cena final
O gancho de ciclo de vida OnEndScene é útil para limpar qualquer coisa em destaque na cena, como desconectar conexões criadas em OnSetup ou OnRun que permanecem durante a duração da cena.
Esquema do Servidor
Schema.OnEndScene = function()
print("OnEndScene (Server)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
end
Configurações de esquema
áudio
Cria um objeto Sound na área de trabalho que toca em um determinado momento.O som é então excluído após a cena terminar ou após o objeto Sound terminar de tocar.
Chave de Configuração | Descrição |
---|---|
StartTime | Quando tocar o áudio em relação à duração da cena, em segundos. |
SoundId | ID de recurso do áudio para jogar. |
OnStart | Função personalizada para disparar quando o áudio começa a tocar. |
OnEnd | Função personalizada para disparar quando o áudio terminar de tocar. |
Volume | Volume do ObjetoSound de volume; o padrão é 0.5. |
Esquema do Cliente
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("Audio playing")
end,
OnEnd = function(self)
print("Audio ended")
end
})
end
animação
Cria um Animation que toca em um determinado momento.
Chave de Configuração | Descrição |
---|---|
StartTime | Quando tocar a animação em relação à duração da cena, em segundos. |
EndTime | Tempo opcional para terminar a animação em relação à duração da cena, em segundos. |
Rig | O rig de animação para tocar a animação. |
AnimationId | ID de recurso da animação para jogar. |
Speed | Velocidade de reprodução da animações; o padrão é 1. |
FadeInTime | Quantidade de tempo para desaparecer na animações, em segundos; o padrão é 0.2 (segundos). |
FadeOutTime | Quantidade de tempo para desaparecer a animações, em segundos; o padrão é 0.2 (segundos). |
OnStart | Função personalizada para disparar quando a animação começa a tocar. |
OnEnd | Função personalizada para disparar quando a animação terminar de tocar. |
Looped | Se repetir a animações; o padrão é false . |
SyncToAudio | Tabela definindo se sincronizar a animação para uma configuração de áudio. Aceita as seguintes chaves:
|
Esquema do Cliente
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
})
local DanceAnimation = Schema:animate({
AnimationId = "rbxassetid://3695333486",
Rig = Dummy,
Speed = 1,
FadeInTime = 0.1,
FadeOutTime = 0.3,
SyncToAudio = {
Audio = MainAudio,
StartAtAudioTime = 5,
},
OnStart = function(self)
print("Animation playing")
end,
OnEnd = function(self)
print("Animation stopped")
end
})
end
interseção
Cria um configurável Tween que é preservado na busca e na junção dinâmica, o que significa que você pode encadear adolescentes em pontos separados no tempo e tudo deve tocar e sincronizar como esperado.
Chave de Configuração | Descrição |
---|---|
StartTimes | Tabela de horários de início em relação à duração da cena, em segundos. |
Tween | Tabela que define o objeto e as propriedades para interseção. Aceita as seguintes chaves:
|
OnStart | Função personalizada para disparar quando o pré-adolescente começa a tocar. |
OnHeartbeat | Função personalizada para disparar a cada Heartbeat ; recebe o alfa-tween como seu segundo parâmetro. |
OnEnd | Função personalizada para disparar quando o tween termina de tocar. |
SyncToAudio | Tabela que define se sincronizar o tween para uma configuração de áudio. Aceita as seguintes chaves:
|
Esquema do Cliente
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
})
local LightFadeOut = Schema:tween({
StartTimes = {29.884},
Tween = {
Object = game:GetService("Lighting"),
Info = TweenInfo.new(2, Enum.EasingStyle.Sine, Enum.EasingDirection.Out),
Properties = {
Brightness = 0,
}
},
SyncToAudio = {
Audio = MainAudio,
StartAtAudioTimes = {5, 7.2, 9.4, 11.6},
},
OnStart = function(self)
print("Tween playing")
end,
OnHeartbeat = function(self, alpha)
print("Tween alpha", alpha)
end,
OnEnd = function(self)
print("Tween completed")
end,
})
end
intervalo
Executa uma função de retorno personalizada por um período especificado em uma frequência especificada, em segundos.Útil para repetir eventos como piscar luzes, pulsar a intensidade de um áudio, etc.A frequência mais baixa possível é de 0 segundos, mas tecnicamente a frequência mínima é sempre limitada a Heartbeat .
Chave de Configuração | Descrição |
---|---|
StartTime | Começo da duração do intervalo em relação à duração da cena, em segundos. |
EndTime | Fim da duração do intervalo em relação à duração da cena, em segundos. |
Frequency | Com que frequência a função OnInterval deve Iniciar / executar, em segundos, com a primeira execução sendo em StartTime. |
OnStart | Função personalizada para disparar quando a série de intervalos começa. |
OnInterval | Função personalizada para disparar a cada intervalo dentro do período especificado ( StartTime para EndTime ). |
OnEnd | Função personalizada para disparar quando a série de intervalos termina. |
SyncToAudio | Tabela definindo se sincronizar a duração do intervalo para uma configuração de áudio. Aceita as seguintes chaves:
|
Esquema do Cliente
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
})
local ClientTimerUpdate = Schema:interval({
Frequency = 1,
SyncToAudio = {
StartAtAudioTime = 2.5,
EndAtAudioTime = 10,
Audio = MainAudio
},
OnInterval = function(self)
print(MainAudio.Sound.TimePosition, MainAudio.CurrentSoundIntensityRatio)
end,
})
end
calendário
Semelhante ao intervalo similar exceto que você pode definir vários tempos de início específicos para o mesmo evento, como agendar um show de fogos de artifício duas vezes em uma cena.
Chave de Configuração | Descrição |
---|---|
StartTimes | Tabela de horários de início em relação à duração da cena, em segundos. |
OnStart | Função personalizada para disparar a cada momento especificado na tabela StartTimes. |
Skippable | Booleano definindo se o evento agendado pode ser ignorado para usuários que se juntam tarde ou para quando buscar antes do horário agendado.Se definido para false, todas as horas de início de evento agendadas antes do tempo de junção/busca ocorrerão nesse tempo de junção/busca.Se definido para true , apenas os tempos de início agendados após entrar/buscar ocorrerão.O padrão é false . |
SyncToAudio | Tabela definindo se sincronizar o cronograma com uma configuração de áudio. Aceita as seguintes chaves:
|
Esquema do Cliente
Schema.OnRun = function()
print("OnRun (Client)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- Inicializar conexão de pulsação temporária
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- Informar framework de conexão
Schema:inform(tempConnection)
end
})
end
informar
Informa o framework de quaisquer módulos, objetos de interface, conexões, etc.que são criados no hook de ciclo de vida OnRun, garantindo que sejam limpados adequadamente quando buscar.Casos de uso incluem:
Informar o framework de uma conexão temporária ad-hoc, como RunService.Heartbeat, para que a conexão seja limpa ao buscar um ponto anterior na duração da cena.
Esquema do ServidorSchema.OnRun = function()print("OnRun (Server)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Inicializar conexão de pulsação temporárialocal tempConnection = RunService.Heartbeat:Connect(function()end)-- Informar framework de conexãoSchema:inform(tempConnection)end})endChamando uma função de Limparpersonalizada em um que inicializa uma conexão ou outra referência durante o gancho de vida útil OnRun .
Esquema do Servidorlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local RunService = game:GetService("RunService")local customModule = require(ReplicatedStorage:WaitForChild("CustomModule"))local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))local Schema = EventSequencer.createSchema()Schema.OnRun = function()print("OnRun (Server)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Chamar a função "init" em módulo personalizadocustomModule.init()-- Chamar a função "clean" em módulo personalizado na Limparda cenaSchema:inform(customModule, customModule.clean)end,})endModuleScript - Módulo Personalizadolocal RunService = game:GetService("RunService")local CustomModule = {}CustomModule.init = function()-- Inicializar conexão de pulsação cardíacaCustomModule.connection = RunService.Heartbeat:Connect(function()end)endCustomModule.clean = function()-- Desconectar e limpar a conexão de pulsação do coraçãoif CustomModule.connection thenCustomModule.connection:Disconnect()CustomModule.connection = nilendendreturn CustomModule
Funções
carregar cena
loadScene(sceneName: string , startTime: number ?)
Carrega programaticamente uma cena por sceneName e inicia-a em startTime a partir do seu início.Haverá um período de 5 segundos de "graça" para a cena carregar do servidor antes que a busca ocorra e a cena comece a tocar.Isso significa que se você chamar loadScene("[SceneName]", 20) às 4:15:00 PM, o framework esperará 5 segundos além dos 20 solicitados, dando início à cena às 4:15:25 PM.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Descubra a próxima cena a ser carregada quando a cena atual terminar
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- “PreShow” terminou; carregue a primeira cena no concerto
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- “Track1” terminou; carregue a segunda cena no concerto
EventSequencer.loadScene("Track2")
else
-- Ciclo de volta para a cena pré-show
EventSequencer.loadScene("PreShow")
end
end)
criar Schema
createSchema(): table
Retorna uma instância do esquema da cena para criar lógica para a cena.
Esquema do Cliente
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
end
buscar
buscar(tempo: number )
Busca o valor time em segundos, a partir do começo da cena carregada atualmente.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.seek(95.58)
definir tempo de aviso de cena
setSceneWarningTime(endSceneTimeWindow: number )
Define a quantidade de tempo do fim de todas as cenas em que um aviso é enviado.Você pode detectar o aviso por meio do lado do cliente através de onSceneEndingWarningForClient ou do lado do servidor através de onSceneEndingWarningForServer.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Carregar cena
EventSequencer.loadScene("BeautifulScene")
-- Defina o tempo de aviso para 5 segundos antes do fim da cena
EventSequencer.setSceneWarningTime(5)
-- Detectar quando a cena está prestes a terminar/parar/sair
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)
setarSeekingPermissões
setSeekingPermissions(permissões: table )
Concede permissões buscando basear-se no evento de e, também, em grupos específicos de e/ou papéis dentro deles.Veja buscar e trocar cenas para mais informações.
obterAmbiente da Cena Atual
getCurrentSceneEnvironment(): Folder (SUSPENSÕES)
Retorna o diretório de Ambiente do lado do cliente ou do lado do servidor da cena atual, dependendo de se foi chamado a partir do esquema de script do Cliente ou do esquema de script do Servidor, respectivamente.
Esquema do Cliente
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local clientEnvironment
local serverEnvironment
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
-- Ambientes de cena de acesso; não se aplica ao Modo Inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end
Esquema do Servidor
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local serverEnvironment
local partColorConnection
local changePartColorEvent = script.Parent.Events.ChangePartColor
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Server)")
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
end
obter ambiente de servidor atual do cliente
getCurrentServerEnvironmentFromClient(): Folder (YIELDS)
Retorna o diretório do lado do servidor da cena atual ambiente.Ao contrário de obterCurrentSceneEnvironment, você pode chamar isso do script do esquema Cliente.
Esquema do Cliente
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
local clientEnvironment
local serverEnvironment
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
-- Ambientes de cena de acesso; não se aplica ao Modo Inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end
carregando cena
estáCarregandoCena(): boolean
Chamado do servidor para saber se uma cena está carregando atualmente.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))print(EventSequencer.isLoadingScene())while EventSequencer.isLoadingScene() dotask.wait()endprint("Scene loaded")
Eventos
警告 de fim de cena para o cliente no final da cena
Fogos no cliente antes que a cena esteja prestes a terminar/parar/sair.O tempo padrão é de 3 segundos, mas você pode configurá-lo através de setSceneWarningTime.Este evento só pode ser conectado em um LocalScript .
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Detectar quando a cena está prestes a terminar (lado do cliente)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("Scene is about to end!")
end)
onSceneEndingWarningForServer para Servidor
Fogos no servidor antes que a cena esteja prestes a terminar/parar/sair.O tempo padrão é de 3 segundos, mas você pode configurá-lo através de setSceneWarningTime.Este evento só pode ser conectado em um Script .
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Detectar quando a cena está prestes a terminar (lado do servidor)
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)
em onSceneLoadedForClient
Incêndios no cliente quando a cena está começando. Este evento só pode ser conectado em um LocalScript .
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Detectar quando a cena está começando (lado do cliente)
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("Scene is starting!")
end)
emOrquestraçãoFinalizada
Incêndios no servidor quando uma cena atingiu seu tempo de duração e terminou efetivamente.Este evento recebe um argumento de nome de corda endedSceneName para a cena que acabou de terminar e você pode encadear este evento para carregar condicionalmente outra cena.Só pode ser conectado em um Script .
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Descubra a próxima cena a ser carregada quando a cena atual terminar
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- “PreShow” terminou; carregue a primeira cena no concerto
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- “Track1” terminou; carregue a segunda cena no concerto
EventSequencer.loadScene("Track2")
else
-- Ciclo de volta para a cena pré-show
EventSequencer.loadScene("PreShow")
end
end)