Sequenciador de Eventos

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

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:

  1. Da janela Ver, abra a Caixa de Ferramentas e selecione a aba Loja do Criador .

    Toolbox toggle button in Studio
  2. Certifique-se de que a classificação Modelos está selecionada, então clique no botão Ver Todos para Categorias .

  3. Localize e clique no tijolo Dev Modules .

  4. Localize o módulo Sequenciador de Eventos e clique nele, ou arraste-e-solte-o para a ver3D.

  5. 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:

  1. 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 .

  2. 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:

  1. Expandir a pasta Sequenciador de Eventos e localizar a pasta BlankScene .

  2. 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:

RecipienteDescriçã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:

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.

  1. Crie um novo Script dentro de ServerScriptService.

  2. Cole o seguinte código no novo script.

    Script - Definir busca de permissões

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
    EventSequencer.setSeekingPermissions({
    placeIDs = {},
    userIDs = {},
    groups = {
    {GroupID = , MinimumRankID = },
    }
    })
  3. Preencha as seguintes tabelas dentro da chamada setSeekingPermissions da seguinte forma:

    placeIDsLista delimitada por vírgula de PlaceId valores para suporte de busca dentro.
    userIDsLista delimitada por vírgula de UserIds para aqueles que podem buscar nos locais suportados.
    groupsLista 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:

  1. Do menu Ver do Studio, abra a Caixa de Ferramentas .

    Toolbox toggle button in Studio
  2. Com a aba Loja do Criador selecionada, selecione Plugins no menu suspenso.

  3. No campo de pesquisa, digite Gerenciador de Cena e pressione Enter para localizar o plugin.

  4. Clique no ícone do plugin para ver seus detalhes e depois clique no botão Instalar .

  5. 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çãoDescriçã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.

  1. 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.

  2. Na janela do plugin Gerenciador de Cena , clique em Salvar Iluminação para a cena desejada.

  3. 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.

  1. Configure o terreno da cena através do serviço de nível superior Terreno .

  2. Na janela do plugin Gerenciador de Cena , clique em Salvar Terreno para a cena desejada.

  3. 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çãoDescrição
StartTimeQuando tocar o áudio em relação à duração da cena, em segundos.
SoundIdID de recurso do áudio para jogar.
OnStartFunção personalizada para disparar quando o áudio começa a tocar.
OnEndFunção personalizada para disparar quando o áudio terminar de tocar.
VolumeVolume 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çãoDescrição
StartTimeQuando tocar a animação em relação à duração da cena, em segundos.
EndTimeTempo opcional para terminar a animação em relação à duração da cena, em segundos.
RigO rig de animação para tocar a animação.
AnimationIdID de recurso da animação para jogar.
SpeedVelocidade de reprodução da animações; o padrão é 1.
FadeInTimeQuantidade de tempo para desaparecer na animações, em segundos; o padrão é 0.2 (segundos).
FadeOutTimeQuantidade de tempo para desaparecer a animações, em segundos; o padrão é 0.2 (segundos).
OnStartFunção personalizada para disparar quando a animação começa a tocar.
OnEndFunção personalizada para disparar quando a animação terminar de tocar.
LoopedSe repetir a animações; o padrão é false .
SyncToAudioTabela definindo se sincronizar a animação para uma configuração de áudio. Aceita as seguintes chaves:
  • Audio – Referência a uma configuração de áudio .
  • StartAtAudioTime – Quando tocar a animação em relação à duração do áudio.
  • EndAtAudioTime – Tempo opcional para terminar a animação em relação à duração do áudio.
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çãoDescrição
StartTimesTabela de horários de início em relação à duração da cena, em segundos.
TweenTabela que define o objeto e as propriedades para interseção. Aceita as seguintes chaves:
  • Object – O objeto para interseção.
  • InfoTweenInfo instância para o adolescente, definindo sua duração, Enum.EasingStyle , Enum.EasingDirection , etc.
  • Properties – Propriedades do objeto e valores alvo associados para o interseção.
OnStartFunção personalizada para disparar quando o pré-adolescente começa a tocar.
OnHeartbeatFunção personalizada para disparar a cada Heartbeat ; recebe o alfa-tween como seu segundo parâmetro.
OnEndFunção personalizada para disparar quando o tween termina de tocar.
SyncToAudioTabela que define se sincronizar o tween para uma configuração de áudio. Aceita as seguintes chaves:
  • Audio – Referência a uma configuração de áudio .
  • StartAtAudioTimes – Tabela de tempos de início que define quando tocar o tween em relação à duração do áudio.
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çãoDescrição
StartTimeComeço da duração do intervalo em relação à duração da cena, em segundos.
EndTimeFim da duração do intervalo em relação à duração da cena, em segundos.
FrequencyCom que frequência a função OnInterval deve Iniciar / executar, em segundos, com a primeira execução sendo em StartTime.
OnStartFunção personalizada para disparar quando a série de intervalos começa.
OnIntervalFunção personalizada para disparar a cada intervalo dentro do período especificado ( StartTime para EndTime ).
OnEndFunção personalizada para disparar quando a série de intervalos termina.
SyncToAudioTabela definindo se sincronizar a duração do intervalo para uma configuração de áudio. Aceita as seguintes chaves:
  • Audio – Referência a uma configuração de áudio .
  • StartAtAudioTime – Quando iniciar a duração do intervalo em relação à duração do áudio.
  • EndAtAudioTime – Tempo opcional para encerrar a duração do intervalo em relação à duração do áudio.
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çãoDescrição
StartTimesTabela de horários de início em relação à duração da cena, em segundos.
OnStartFunção personalizada para disparar a cada momento especificado na tabela StartTimes.
SkippableBooleano 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 .
SyncToAudioTabela definindo se sincronizar o cronograma com uma configuração de áudio. Aceita as seguintes chaves:
  • Audio – Referência a uma configuração de áudio .
  • StartAtAudioTimes – Tabela de tempos de início que define quando disparar a função OnStart em relação à duração do áudio.
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 Servidor

    Schema.OnRun = function()
    print("OnRun (Server)")
    Schema:schedule({
    StartTimes = {5},
    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
  • Chamando 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 Servidor

    local 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 personalizado
    customModule.init()
    -- Chamar a função "clean" em módulo personalizado na Limparda cena
    Schema:inform(customModule, customModule.clean)
    end,
    })
    end
    ModuleScript - Módulo Personalizado

    local RunService = game:GetService("RunService")
    local CustomModule = {}
    CustomModule.init = function()
    -- Inicializar conexão de pulsação cardíaca
    CustomModule.connection = RunService.Heartbeat:Connect(function()
    end)
    end
    CustomModule.clean = function()
    -- Desconectar e limpar a conexão de pulsação do coração
    if CustomModule.connection then
    CustomModule.connection:Disconnect()
    CustomModule.connection = nil
    end
    end
    return 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() do
task.wait()
end
print("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)