Secuenciador de eventos

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

EventSequencer es un marco poderoso que te permite construir eventos en sitio activoy escenas cruzadas en una secuencia estructurada de acciones y gatillos.Más específicamente, este módulo te ayuda:

  • Construye un evento o escena en un marco estructurado a través de configuraciones programadas de sonido, audio, animaciones y adolescentes.
  • Transición entre múltiples escenas en múltiples servidores, sincronizando animaciones y visuales complejos a una línea de tiempo.
  • Busca a través de un evento y prevé la experiencia para fines de prueba y desarrollo.

Este marco ha sido probado en batalla en eventos de Roblox como el Twenty One Pilots y 24kGoldn conciertos, así como muchas experiencias altamente visitadas.

Para ver secuenciador de eventos en acción dentro de un lugar editable, echa un vistazo al modelo Concierto en Roblox Studio.Esta plantilla es un punto de partida completo para que los desarrolladores creen eventos/conciertos y se familiaricen con las diversas características y componentes involucrados.

Uso de módulo

Instalación

Para usar el marco EventSequencer en una experiencia:

  1. Desde la vista, abra la caja de herramientas y seleccione la pestaña Tienda de creadores .

    Toolbox toggle button in Studio
  2. Asegúrese de que la clasificación de modelos esté seleccionada, luego haga clic en el botón Ver todo para categorías .

  3. Localiza y haz clic en el mosaico Módulos de desarrollo .

  4. Localice el módulo Secuenciador de eventos y haga clic en él, o arrástrelo a la vista 3D.

  5. En la ventana Explorador, mueva todo el modelo Secuenciador de eventos al servicio ServerScriptService .Al ejecutar la experiencia, el módulo se distribuirá a varios servicios y comenzará a funcionar.

Modos de marco

Reemplazar modo

El modo predeterminado del marco es reemplazar modo en el que diseñas escenas únicas por medio de la colocación de objetos 3D , terreno , propiedades de iluminación , efectos ambientales y objetos de interfaz de usuario en la carpeta Entorno de esa escena.Cuando una escena se carga, esos objetos y propiedades se distribuyen en , , y , reemplazando los objetos/propiedades existentes para formar un espacio clonado.

Modo en línea

Un modo de marco alternativo es modo en línea en el que diseñas de manera similar escenas únicas con lógica de programación para su flujo/eventos, pero el marco no destruirá no objetos 3D existentes, terreno , propiedades de iluminación , efectos ambientales y objetos de interfaz de usuario para clonar activos/propiedades de una carpeta del entorno de una escena al cargar.

Para habilitar el modo en línea:

  1. Dentro del modelo EventSequencer que colocaste en ServerScriptService , desciende y selecciona el valor en línea dentro de la carpeta ReplicatedStorage .

  2. En la ventana Propiedades, active la casilla de verificación Valor .

Crear escenas

Una escena es esencialmente parte de un evento general o una escena recortada en una serie de carpetas.Cada escena contiene lógica de programación que define su flujo/eventos, y una escena puede almacenar sus propios objetos 3D, terreno, propiedades de iluminación, efectos ambientales y objetos de interfaz de usuario.

Para comenzar rápidamente, puede encontrar una escena vacía dentro de la carpeta principal del módulo:

  1. Expande la carpeta Secuenciador de eventos y localiza la carpeta Escena en blanco .

  2. Mueva o copie toda la carpeta BlankScene en Almacenamiento replicado .

Duración del tiempo

Cada escena debe tener una duración de tiempo , en segundos, que defina su duración —igual que una película o un concierto tiene una duración establecida.La duración del tiempo se define como un atributo numérico en la carpeta de la escena llamada Duración del tiempo que puedes configurar directamente en Studio o programáticamente a través de .

Entorno

El directorio Entorno de una escena contiene todo lo que los usuarios ven y oyen, incluido objetos 3D, terreno, propiedades de iluminación y efectos ambientales, y objetos de interfaz de usuario.Cuando una escena se carga, esos objetos y propiedades se distribuyen en Workspace , Terrain , y Lighting , reemplazando objetos/propiedades existentes para formar un espacio clonado.

La carpeta Entorno contiene los siguientes contenedores:

ContenedorDescripción
Cliente Contiene todos los recursos a cargar cuando cualquier usuario (cliente) se una al evento, como objetos de interfaz de usuario o un rig de animación.
Generadores de jugadores Contiene partes donde los usuarios aparecen al unirse. Cualquier parte en este directorio se comporta de manera similar a un SpawnLocation .
Servidor Contiene todos los recursos a cargar cuando una escena se crea por primera vez en un servidor. Se recomienda que la mayoría de los recursos visuales vayan aquí.
Terrreno Contiene terreno de escena.
Iluminación Contiene propiedades de iluminación globales como atributos, así como modificadores como efectos atmosféricos y efectos de post-procesado.

Eventos

El directorio de eventos de una escena es puramente un marcador para que se comunican entre los módulos del cliente y del servidor.No es un requisito colocar nada en esta carpeta.

Cliente

Este script ejecuta la lógica de esquema en el cliente.

Servidor

Este script ejecuta la lógica de esquema en el servidor.

Esquemas de escena

El esquema de una escena define lo que sucede en qué punto en el calendario de la escena .Debe definir el esquema de una escena en ambos módulos Cliente y Servidor y incluir ganchos de ciclo de vida para gestionar cuando producirse configuraciones .

Ganchos de ciclo de vida

El esquema ganchos de ciclo de vida te permite administrar cuando producirselas operaciones de la escena. Una escena en producción generalmente se ejecutará en el flujo más simple:

OnRun puede ser interrumpido al buscar:

Todos los tres ganchos también se pueden repetir si la escena se reproduce:

Configuraciones

Las configuraciones de esquema definen las operaciones principales de una escena, por ejemplo, reproducir audio a las 00:32, programar una animación para sincronizarse con ese sonido, audio, programar un evento de escena como un mostrarde fuegos artificiales y más.Cada configuración soporta ciertas funciones de llamada de devolución donde el primer parámetro ( self ) es la instancia de configuración.

Buscar escenas

Una característica única de EventSequencer es la capacidad de "buscar" alrededor de las escenas como podrías buscar a través de un video.En Reemplazar modo, también puedes cambiar entre escenas para previsualizar un evento multiescena completo antes de implementarlo en producción.

La búsqueda de escenas no es accesible para todos ya que los usuarios simplemente disfrutando del evento no deberían tener la capacidad de controlar su flujo de tiempo.En cambio, debe otorgar permisos buscando en función del evento y, además, grupos específicos y/o roles dentro de ellos.

  1. Crea un nuevo Script dentro de ServerScriptService .

  2. Pega el siguiente código en el nuevo script.

    Script - Establecer permisos de búsqueda

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
    EventSequencer.setSeekingPermissions({
    placeIDs = {},
    userIDs = {},
    groups = {
    {GroupID = , MinimumRankID = },
    }
    })
  3. Llena las siguientes tablas dentro de la llamada setSeekingPermissions de la siguiente manera:

    placeIDsLista delimitada por comas de PlaceId valores para apoyar la búsqueda dentro.
    userIDsLista delimitada por comas de UserIds para aquellos que puedan buscar dentro de los lugares admitidos.
    groupsLista delimitada por comas de tablas, cada una que contiene un ID de grupo y el rango mínimo de los miembros de ese grupo que pueden buscar dentro de los lugares admitidos.

complementode administrador de escena

El plugin Gestor de escena es una herramienta útil para cargar y descargar escenas, iluminación y terreno.A menos que estés usando modo en línea, se recomienda encarecidamente que uses este plugin en lugar de colocar/editar manualmente objetos y propiedades de escena.

Para instalar el complemento:

  1. Desde el menú de vista de Studio , abra la caja de herramientas .

    Toolbox toggle button in Studio
  2. Con la pestaña Tienda de creadores seleccionada, seleccione plugins en el menú desplegable.

  3. En el campo de búsqueda, escriba Gerente de escena y presione Enter para localizar el complemento.

  4. Haga clic en el icono del complementopara ver sus detalles y luego haga clic en el botón Instalar .

  5. Una vez que el plugin se instala, aparece en la pestaña Plugins de Studio.

Cargar y descargar escenas

Como se describe en crear escenas, la carpeta Entorno de una escena contiene todo lo que los usuarios ven y oyen, incluido objetos 3D.El plugin te ayuda a cargar rápidamente los recursos de una escena dentro o fuera de carpetas organizadas dentro del espacio de trabajo.

acciónde pluginDescripción
Cargar cliente Si el contenido del cliente de la escena se desvía, mueve su carpeta Entorno / Cliente a la carpeta Espacio de trabajo / EscenasClient .
Cargar servidor Si el contenido del servidor de la escena se desvía, mueve su carpeta Entorno / Servidor al directorio Espacio de trabajo / ScenesServer .
Descargar cliente Si el contenido del cliente de la escena se carga, mueve su carpeta Cliente de Espacio de trabajo / EscenasClient de vuelta a la carpeta [Escena] / Entorno .
Descargar servidor Si el contenido del servidor de la escena se carga, mueve su carpeta Servidor de Espacio de trabajo / Servidor de escenas de vuelta a la carpeta [Escena] / Entorno .
Descargar todas las escenas Mueve la carpeta Cliente y Servidor de cada escena cargada de vuelta a su carpeta Entorno .

Guardar y cargar iluminación

El servicio de nivel superior Lighting almacena todas las propiedades de iluminación y efectos visuales de un lugar.Dado que es un servicio de alto nivel, no puedes moverlo manualmente a la carpeta Entorno / Servidor / Entorno / Cliente de una escena en particular.En cambio, puedes utilizar el plugin para copiar sus propiedades y hijos al directorio Entorno / Iluminación de la escena.

  1. Configura las propiedades de iluminación de la escena , los efectos de post-procesado y los efectos atmosféricos y las cajas de cielo a través del servicio de nivel superior >.

  2. En la ventana del plugin Gestor de escena , haz clic en Guardar iluminación para la escena deseada.

  3. Seleccione y expanda la configuración de Entorno / Iluminación de esa escena y verá las mismas propiedades de iluminación que los atributos de la carpeta, así como los hijos clonados del servicio de nivel superior .

    Instancias clonadas
    Atributos guardados

    Una vez que se guardan las propiedades de iluminación y los hijos para una escena, puedes cargarlos rápidamente de vuelta al servicio de nivel superior Lighting haciendo clic en Cargar iluminación desde la ventana del plugin.

Guardar y cargar terreno

Dado que Terrain es una clase de alto nivel dentro de Workspace, no puedes mover manualmente el terreno generado o esculpido a la carpeta Entorno / Servidor / Medio ambiente / Cliente del entorno de una escena en particular.En cambio, puedes utilizar el plugin para copiarlo al directorio Entorno / Terreno de la escena.

  1. Configura el terreno de la escena a través del servicio de nivel superior Terreno .

  2. En la ventana del plugin Gestor de escena , haz clic en Guardar terreno para la escena deseada.

  3. Seleccione y expanda el directorio Entorno / Terreno de esa escena y verá un objeto Región de terreno que representa el terreno guardado.

    Una vez que se guarde el terreno para una escena, puedes cargarlo rápidamente de vuelta al servicio de nivel superior Terrain haciendo clic en Cargar terreno desde la ventana del plugin.

Referencia de API

Ganchos de ciclo de vida del esquema

En la configuración

El gancho de ciclo de vida OnSetup está destinado a inicializar recursos y variables que se referenciarán en OnRun o OnEndScene, configurar connections que están destinados a durar durante la escena, etc.Este gancho recibe el parámetro timePositionObject que te permite leer el tiempo actual al configurar.

Esquema de 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)")
-- Acceder a los entornos de escena; no se aplica al modo en línea
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- Espera a los recursos
dummy = clientEnvironment:WaitForChild("Dummy")
print("Current time is:", timePositionObject.Value)
end
Esquema del 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)")
-- entorno, ambientede escena de acceso; no se aplica al modo en línea
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("Current time is:", timePositionObject.Value)
end

Al ejecutarse

OnRun es el principal punto de enganche del ciclo de vida operativo dentro de un esquema.Debe contener todas las configuraciones programadas para la escena, desde jugar audio o una animación hasta programar un evento como un espectáculo de fuegos artificiales

Esquema de 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

En la escena final

El gancho de ciclo de vida OnEndScene es útil para limpiar cualquier cosa destacada en la escena, como desconectar conexiones creadas en OnSetup o OnRun que permanecen durante la duración de la escena.

Esquema del servidor

Schema.OnEndScene = function()
print("OnEndScene (Server)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
end

Configuraciones de esquema

sonido, audio

Crea un objeto Sound en el espacio de trabajo que se reproduce en un momento determinado.El sonido se elimina luego después de que la escena termine o después de que el objeto Sound termine de reproducirse.

Clave de configuraciónDescripción
StartTimeCuándo reproducir el audio en relación con la duración de la escena, en segundos.
SoundIdID de activo del audio para jugar.
OnStartFunción personalizada para disparar cuando el audio comienza a reproducirse.
OnEndFunción personalizada para disparar cuando el audio termine de reproducirse.
VolumeVolumen del objeto Sound ; el predeterminado es 0.5.
Esquema de 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

animar

Crea un Animation que se reproduce en un momento determinado.

Clave de configuraciónDescripción
StartTimeCuándo reproducir la animación en relación con la duración de la escena, en segundos.
EndTimeTiempo opcional para terminar la animación en relación con la duración de la escena, en segundos.
RigEl rig de animación para reproducir la animación.
AnimationIdID de activo de la animación para jugar.
SpeedVelocidad de reproducción de la animaciones; el valor predeterminado es 1.
FadeInTimeCantidad de tiempo para desaparecer en la animaciones, en segundos; el predeterminado es 0.2 (segundos).
FadeOutTimeCantidad de tiempo para desaparecer la animaciones, en segundos; el predeterminado es 0.2 (segundos).
OnStartFunción personalizada para disparar cuando la animación comience a jugar.
OnEndFunción personalizada para disparar cuando la animación termine de jugar.
LoopedSi se debe buclear la animaciones; el predeterminado es false .
SyncToAudioTabla que define si sincronizar la animación a una configuración de audio. Acepta las siguientes claves:
  • Audio – Referencia a una configuración de audio .
  • StartAtAudioTime – Cuándo reproducir la animación en relación con la duración del sonido, audio.
  • EndAtAudioTime – Tiempo opcional para terminar la animación en relación con la duración del sonido, audio.
Esquema de 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

intermediación/interpolación de movimiento

Crea un configurable Tween que se preserva en la búsqueda y en la unión dinámica, lo que significa que puedes encadenar a adolescentes en puntos separados en el tiempo y todo debería jugar y sincronizarse como se esperaba.

Clave de configuraciónDescripción
StartTimesTabla de tiempos de inicio en relación con la duración de la escena, en segundos.
TweenTabla que define el objeto y las propiedades para intermediación/interpolación de movimiento. Acepta las siguientes teclas:
  • Object – El objeto para pasar por alto.
  • InfoTweenInfo instancia para el intermediación/interpolación de movimiento, que define su duración, Enum.EasingStyle , Enum.EasingDirection , etc.
  • Properties – Propiedades de objetos y valores de destino asociados para el intermediación/interpolación de movimiento.
OnStartFunción personalizada para disparar cuando el preadolescente comience a jugar.
OnHeartbeatFunción personalizada para disparar en cada Heartbeat ; recibe el alfa adolescente como su segundo parámetro.
OnEndFunción personalizada para disparar cuando el tween termine de jugar.
SyncToAudioTabla que define si sincronizar al preadolescente a una configuración de audio. Acepta las siguientes claves:
  • Audio – Referencia a una configuración de audio .
  • StartAtAudioTimes – Tabla de tiempos de inicio que define cuándo reproducir al adolescente en relación con la duración del sonido, audio.
Esquema de 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

Ejecuta una función de llamada personalizada durante una duración especificada en una frecuencia especificada, en segundos.Útil para repetir eventos como parpadear luces, pulsar la intensidad de un sonido, audio, etc.La frecuencia más baja posible es de 0 segundos, pero técnicamente la frecuencia mínima siempre se clava a Heartbeat .

Clave de configuraciónDescripción
StartTimeComienzo de la duración del intervalo en relación con la duración de la escena, en segundos.
EndTimeFin de la duración del intervalo en relación con la duración de la escena, en segundos.
FrequencyCon qué frecuencia debe desencadenarla función OnInterval en segundos, con la primera ejecución en StartTime.
OnStartFunción personalizada para disparar cuando comienza la serie de intervalos.
OnIntervalFunción personalizada para disparar en cada intervalo dentro de la duración especificada ( StartTime a EndTime ).
OnEndFunción personalizada para disparar cuando termina la serie de intervalos.
SyncToAudioTabla que define si sincronizar la duración del intervalo a una configuración de audio. Acepta las siguientes claves:
  • Audio – Referencia a una configuración de audio .
  • StartAtAudioTime – Cuándo comenzar la duración del intervalo en relación con la duración del sonido, audio.
  • EndAtAudioTime – Tiempo opcional en el que terminar la duración del intervalo en relación con la duración del sonido, audio.
Esquema de 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

calendario

Similar a intervalo excepto que puedes definir múltiples tiempos de inicio específicos para el mismo evento, como programar una demostración de fuegos artificiales dos veces en una escena.

Clave de configuraciónDescripción
StartTimesTabla de tiempos de inicio en relación con la duración de la escena, en segundos.
OnStartFunción personalizada para disparar en cada momento especificado en la tabla StartTimes.
SkippableBooleano que define si el evento programado se puede omitir para los usuarios que se unen tarde o para cuando se busca antes de una hora de inicio programada.Si se establece en false, todas las horas de inicio de eventos programadas antes del tiempo de unión/búsqueda ocurrirán en ese tiempo de unión/búsqueda.Si se establece en true , solo producirselos tiempos de inicio programados después de unirse/buscar.Por defecto es false .
SyncToAudioTabla que define si sincronizar el calendario con una configuración de audio audio. Acepta las siguientes claves:
  • Audio – Referencia a una configuración de audio .
  • StartAtAudioTimes – Tabla de tiempos de inicio que define cuándo disparar la función OnStart en relación con la duración del sonido, audio.
Esquema de cliente

Schema.OnRun = function()
print("OnRun (Client)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- Inicializar conexión de latido temporal
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- Informar marco de conexión
Schema:inform(tempConnection)
end
})
end

información

Informa al marco de cualquier módulo, objetos de interfaz, conexiones, etc.que se crean en el gancho de ciclo de vida OnRun, asegurando que se limpien adecuadamente cuando se busque .Los casos de uso incluyen:

  • Informar al marco de una conexión temporal ad hoc como RunService.Heartbeat para que la conexión se limpie al buscar un punto anterior en la duración de la escena.

    Esquema del servidor

    Schema.OnRun = function()
    print("OnRun (Server)")
    Schema:schedule({
    StartTimes = {5},
    OnStart = function(self)
    -- Inicializar conexión de latido temporal
    local tempConnection = RunService.Heartbeat:Connect(function()
    end)
    -- Informar marco de conexión
    Schema:inform(tempConnection)
    end
    })
    end
  • Llamar una función de limpieza personalizada en un ModuleScript que inicializa una conexión o otra referencia durante el gancho de ciclo de vida OnRun.

    Esquema del 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)
    -- Llamar función "init" en módulo personalizado
    customModule.init()
    -- Llamar función "clean" en módulo personalizado durante la limpieza de escena
    Schema:inform(customModule, customModule.clean)
    end,
    })
    end
    ModuleScript - Modulo personalizado

    local RunService = game:GetService("RunService")
    local CustomModule = {}
    CustomModule.init = function()
    -- Inicializar conexión de latido del corazón
    CustomModule.connection = RunService.Heartbeat:Connect(function()
    end)
    end
    CustomModule.clean = function()
    -- Desconectar y borrar la conexión de latido del corazón
    if CustomModule.connection then
    CustomModule.connection:Disconnect()
    CustomModule.connection = nil
    end
    end
    return CustomModule

Funciones

cargar escena

loadScene(nombre de escena: string , tiempo de inicio: number ?)

Carga programáticamente una escena por sceneName y la inicia en startTime desde el principio.Habrá un período de gracia de 5 segundos para que la escena se cargue desde el servidor antes de que ocurra la búsqueda y la escena comience a reproducirse.Esto significa que si llamas a loadScene("[SceneName]", 20) a las 4:15:00 PM, el marco esperará 5 segundos además de los 20 solicitados, lanzando la escena a las 4:15:25 PM.

Guión

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Determine la siguiente escena para cargar cuando la escena actual termine
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- Se terminó "PreShow"; carga la primera escena en el concierto
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- Se terminó "Track1"; carga la segunda escena en el concierto
EventSequencer.loadScene("Track2")
else
-- Repetir la escena pre-show
EventSequencer.loadScene("PreShow")
end
end)

crearEsquema

createSchema(): table

Devuelve una instancia del esquema de la escena para crear lógica para la escena.

Esquema de 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(tiempo: number )

Busca el valor time en segundos, desde el comienzo de la escena cargada actualmente.

Guión

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
EventSequencer.seek(95.58)

establecer el tiempo de advertencia de escena

setSceneWarningTime(endSceneTimeWindow: number )

Establece la cantidad de tiempo desde el final de todas las escenas en las que se envía una advertencia.Puedes detectar la advertencia desde el lado del cliente a través de onSceneEndingWarningForClient o desde el lado del servidor a través de onSceneEndingWarningForServer.

Guión

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Cargar escena
EventSequencer.loadScene("BeautifulScene")
-- Establecer el tiempo de advertencia en 5 segundos antes de que termine la escena
EventSequencer.setSceneWarningTime(5)
-- Detecta cuando la escena está a punto de finalizar
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)

establecerSeekingPermissions

setSeekingPermissions(permisos: table )

Otorga permisos buscando basados en el evento de así como grupos específicos y/o roles dentro de ellos.Vea buscar y cambiar escenas para obtener más información.

obtener el entorno de escena actual

getCurrentSceneEnvironment(): Folder (SE RENDIMIENTA)

Devuelve el directorio de Entorno del lado del cliente o del lado del servidor de la escena actual, dependiendo de si se llama desde el esquema de Cliente o el esquema de Servidor respectivamente.

Esquema de 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)")
-- Acceder a los entornos de escena; no se aplica al modo en línea
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end
Esquema del 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

obtener el entorno del servidor actual desde el cliente

getCurrentServerEnvironmentFromClient(): Folder (YIELDS)

Devuelve el directorio de Entorno del lado del servidor de la escena actual.A diferencia de getCurrentSceneEnvironment, puedes llamar esto desde el script de esquema del cliente.

Esquema de 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)")
-- Acceder a los entornos de escena; no se aplica al modo en línea
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end

está cargando escena

esLoadingScene(): boolean

Llamado desde el servidor para saber si una escena se está cargando actualmente.

Guión

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

onSceneEndingWarningForClient

Incendios en el cliente antes de que la escena esté a punto de finalizar.El tiempo predeterminado es de 3 segundos, pero puedes configurarlo a través de setSceneWarningTime.Este evento solo se puede conectar en un LocalScript .

Guión local

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Detectar cuando la escena está a punto de terminar (lado del cliente)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("Scene is about to end!")
end)

onSceneEndingWarningForServer para servidor

Incendios en el servidor antes de que la escena esté a punto de finalizar.El tiempo predeterminado es de 3 segundos, pero puedes configurarlo a través de setSceneWarningTime.Este evento solo se puede conectar en un Script .

Guión

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Detectar cuando la escena está a punto de terminar (lado del servidor)
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)

en sceneLoadedForClient

Se produce fuegos en el cliente cuando la escena está comenzando. Este evento solo se puede conectar en un LocalScript .

Guión local

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Detectar cuando la escena está comenzando (lado del cliente)
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("Scene is starting!")
end)

enOrquestaciónTerminada

Se incendian en el servidor cuando una escena ha alcanzado su duración de tiempo y se ha terminado efectivamente.Este evento recibe un argumento de nombre de cadena endedSceneName para la escena que acaba de terminar y puedes encadenar este evento para cargar condicionalmente otra escena .Solo se puede conectar en un Script .

Guión

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Determine la siguiente escena para cargar cuando la escena actual termine
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- Se terminó "PreShow"; carga la primera escena en el concierto
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- Se terminó "Track1"; carga la segunda escena en el concierto
EventSequencer.loadScene("Track2")
else
-- Repetir la escena pre-show
EventSequencer.loadScene("PreShow")
end
end)