Sequenziatore eventi

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

EventSequencer è un potente framework che ti consente di costruire eventi dal Attivae scene incrociate su una sequenza strutturata di azioni e trigger.Più specificamente, questo modulo ti aiuta:

  • Costruisci un evento o una scena su un framework strutturato attraverso le configurazioni programmate di audio/suono, animazioni e adolescenti.
  • Transizione tra più scene su più server, sincronizzando complesse animazioni e visuali a una timeline.
  • Cerca attraverso un evento e visualizza l'esperienza per scopi di test e sviluppo.

Questo framework è stato testato in battaglia negli eventi di Roblox come il Twenty One Pilots e 24kGoldn concerti, così come molte esperienze altamente visitate.

Per vedere EventSequencer in azione all'interno di un Postomodificabile, controlla il modello Concerto in Roblox Studio.Questo modello è un punto di partenza completo per i sviluppatori per creare eventi/concerti e familiarizzare con le varie funzionalità e componenti coinvolte.

Uso del modulo

Installazione

Per utilizzare il framework EventSequencer in un'esperienza:

  1. Dalla Visualizzazione, apri la Toolbox e seleziona la scheda Creator Store .

    Toolbox toggle button in Studio
  2. Assicurati che la classificazione Modelli sia selezionata, quindi fai clic sul pulsante Vedi tutti per Categorie .

  3. Individua e fai clic sul riquadro Moduli di sviluppo .

  4. Individua il modulo Sequenziatore eventi e cliccalo, o trascinalo nella vista 3D.

  5. Nella finestra Explorer, sposta l'intero modello EventSequencer nel ServerScriptService .Dopo l'esecuzione dell'esperienza, il modulo si distribuirà a vari servizi e inizierà a funzionare.

Modalità framework

Sostituisci modalità

La modalità framework predefinita è sostituire la modalità in cui progetti scene uniche posizionando oggetti 3D , terreno , proprietà di illuminazione , effetti ambientali e oggetti interfaccia utente nell'archiviazione Ambiente di quella scena.Quando una scena viene caricata, questi oggetti e proprietà vengono distribuiti in , e , sostituendo gli oggetti/proprietà esistenti per formare uno Spazioclonato.

Modalità inline

Un modo alternativo di framework è modalità inline in cui progetti in modo analogo scene uniche con logica di scripting per il loro flusso/eventi, ma il framework non distruggerà non oggetti 3D esistenti, terreno , proprietà di illuminazione , effetti ambientali e oggetti interfaccia utente per clonare le risorse/proprietà da una cartella dell'ambiente della scena durante il caricamento.

Per abilitare la modalità inline:

  1. All'interno del modello EventSequencer che hai posizionato in ServerScriptService , scendi e seleziona il valore inline all'interno della cartella ReplicatedStorage .

  2. Nella finestra Proprietà, attiva la casella di controllo Valore .

Crea scene

Una scena è essenzialmente parte di un evento generale o di una cutscene avvolta in una serie di cartelle.Ogni scena contiene una logica di scripting che definisce il suo flusso/eventi e una scena può contenere i propri oggetti 3D, terreno, proprietà di illuminazione, effetti ambientali e oggetti dell'interfaccia utente.

Per iniziare rapidamente, puoi trovare una scena vuota all'interno della cartella principale del modulo:

  1. Espandi la cartella EventSequencer e localizza la cartella BlankScene .

  2. Sposta o copia l'intera cartella BlankScene in ReplicatedStorage .

Durata del tempo

Ogni scena dovrebbe avere una durata del tempo , in secondi, che definisce la sua durata - proprio come un film o un concerto ha una durata predefinita.La durata del tempo è definita come un attributo numerico sulla cartella della scena chiamata Durata del tempo che puoi impostare direttamente in Studio o programmaticamente attraverso .

Ambiente

La cartella ambiente di una scena contiene tutto ciò che gli utenti vedono e sentono, inclusi oggetti 3D, terreno, proprietà di illuminazione e effetti ambientali, e oggetti dell'interfaccia utente.Quando una scena viene caricata, questi oggetti e proprietà vengono distribuiti in Workspace , Terrain e Lighting , sostituendo gli oggetti/proprietà esistenti per formare uno Spazioclonato.

La cartella Ambiente contiene i seguenti container:

ContatoreDescrizione
Cliente Contiene tutti gli asset da caricare quando qualsiasi utente (client) si unisce all'evento, come oggetti dell'interfaccia utente o un Piattaforma di testdi animazione.
Generatori di giocatori Contiene parti in cui gli utenti si generano al momento dell'adesione. Ogni parte in questo folder si comporta in modo simile a un SpawnLocation .
Server Contiene tutti gli assets da caricare quando una scena viene creata per la prima volta su un Server. Si consiglia di caricare la maggior parte delle risorse visive qui.
Terreno Contiene il terreno della scena.
Illuminazione Contiene proprietà globali di illuminazione come attributi, oltre a modificatori come effetti atmosferici e effetti post-elaborazione.

Eventi

La cartella Eventi di una scena è puramente un placeholder per RemoteEvents che comunica tra i moduli Client e Server.Non è un requisito mettere qualcosa in questo folder.

Cliente

Questo script esegue la logica schema sul client.

Server

Questo script esegue la logica schema sul Server.

Schemi di scena

Lo schema di una scena define ciò che accade a che punto nella timeline della scena.Dovresti definire lo schema di una scena nei suoi moduli Client e Server, e includere hook di vita per gestire quando si Si verificano configurazioni .

Ganci di ciclo di vita

Lo schema ganci di vita ti consente di gestire quando si Si verificanole operazioni della scena. Una scena in produzione verrà tipicamente eseguita nel flusso più semplice:

OnRun può essere interrotto quando si cerca:

Tutti e tre gli hook possono anche ripetersi se la scena viene riprodotta:

Configurazioni

Le configurazioni dello schema definiscono le operazioni principali di una scena, ad esempio riproduzione audio alle 00:32, in attesa di un'animazione sincronizzata con quell'audio/suono, programmazione di un evento della scena come uno Mostraredi fuochi d'artificio e altro ancora.Ogni configurazione supporta alcune funzioni di richiamo in cui il primo parametro ( self ) è l'istanza di configurazione.

Cerca scene

Una caratteristica unica di EventSequencer è la capacità di "cercare" intorno alle scene come potresti cercare attraverso un video.In Modalità di sostituzione, puoi anche passare da una scena all'altra per visualizzare un evento multi-scena intero prima di distribuirlo in produzione.

La ricerca della scena non è accessibile a tutti poiché gli utenti che semplicemente godono dell'evento non dovrebbero avere la possibilità di controllare il flusso del tempo.Invece, devi concedere il permesso di ricerca in base all'evento e a gruppi e ruoli specifici e/o all'interno di essi.

  1. Crea una nuova Script dentro ServerScriptService .

  2. Incolla il seguente codice nel nuovo script.

    Script - Imposta i permessi di ricerca

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
    EventSequencer.setSeekingPermissions({
    placeIDs = {},
    userIDs = {},
    groups = {
    {GroupID = , MinimumRankID = },
    }
    })
  3. Riempi le seguenti tabelle all'interno della chiamata setSeekingPermissions come segue:

    placeIDsLista delimitata da virgola di PlaceId valori per supportare la ricerca all'interno.
    userIDsLista delimitata da virgola di UserIds per coloro che possono cercare all'interno dei luoghi supportati.
    groupsLista delimitata da virgola di tabelle, ognuna delle quali contiene un ID di gruppo gruppo e il grado minimo dei membri di quel Gruppoche possono cercare all'interno dei luoghi supportati.

Collegaremanager della scena

Il plugin Gestore della scena è uno strumento utile per caricare e scaricare scene, illuminazione e terreno.A meno che tu non stia usando Modalità inline, è altamente raccomandato utilizzare questo plugin invece di posizionare/modificare manualmente oggetti e proprietà della scena.

Per installare il Collegare:

  1. Dal menu Visualizza di Studio, apri la Toolbox .

    Toolbox toggle button in Studio
  2. Con la scheda Creator Store selezionata, seleziona Plugin dal menu a discesa.

  3. Nel campo di ricerca, digita Gestore della scena e premi Enter per localizzare il Collegare.

  4. Fai clic sull'icona del Collegareper visualizzare i suoi dettagli e quindi fai clic sul pulsante Installa .

  5. Una volta installato il plugin, appare nella scheda Plugin di Studio.

Carica e scarica le scene

Come descritto in creazione di scene, la cartella Ambiente di una scena contiene tutto ciò che gli utenti vedono e sentono, inclusi oggetti 3D.Il plugin ti aiuta a caricare rapidamente le risorse di una scena in o fuori cartelle organizzate all'interno dello spazio di lavoro.

Azione del azioneDescrizione
Carica client Se il contenuto del client della scena viene disattivato, sposta la sua cartella Ambiente / Cliente nella cartella Workspace / SceneClient .
Carica server Se il contenuto del server della scena viene disattivato, sposta la sua cartella Ambiente / Server nella cartella Workspace / SceneServer .
Rilascia client Se il contenuto del client della scena viene caricato, sposta la sua cartella Client da Workspace / ScenesClient indietro alla cartella [Scena] / Ambiente .
Rilascia Server Se il contenuto del server della scena viene caricato, sposta la sua cartella Server da Workspace / ScenesServer indietro alla cartella [Scena] / Ambiente .
Dismetti tutte le scene Sposta la cartella Client e Server di ogni scena caricata indietro alla sua cartella Ambiente .

Salva e carica la luce

Il servizio di livello superiore Lighting memorizza tutte le proprietà di illuminazione e gli effetti visivi di un Posto.Poiché è un servizio di alto livello, non puoi spostarlo manualmente nel ambiente / server / ambiente / client della scena particolare.Invece, puoi utilizzare il plugin per copiare le sue proprietà e i figli nella cartella Ambiente / Illuminazione della scena.

  1. Configura le proprietà di illuminazione della scena e gli effetti di post-elaborazione , gli effetti atmosferici e le skybox attraverso il servizio di alto livello .

  2. Nella finestra del plugin Gestore della scena , clicca Salva illuminazione per la scena desiderata.

  3. Seleziona e espandi la configurazione Ambiente / Illuminazione di quella scena e vedrai le stesse proprietà di illuminazione come attributi del folder, nonché i figli clonati del servizio di livello superiore .

    Istanze clonate
    Attributi salvati

    Una volta salvate le proprietà di illuminazione e i figli per una scena, puoi caricarli rapidamente nuovamente nel servizio di livello superiore Lighting facendo clic su Carica illuminazione dalla finestra del plugin.

Salva e carica il terreno

Dal momento che Terrain è una classe di alto livello all'interno di Workspace , non puoi spostare manualmente il terreno generato o scolpito in un particolare ambiente Environment / Server o Environment / Cliente cartella.Invece, puoi utilizzare il plugin per copiarlo nella cartella Ambiente / Terreno della scena.

  1. Configura il terreno della scena attraverso il servizio di livello superiore Terreno .

  2. Nella finestra del plugin Gestore della scena , clicca Salva terreno per la scena desiderata.

  3. Seleziona e espandi la cartella Ambiente / Terreno di quella scena e vedrai un oggetto TerrainRegion che rappresenta il terreno salvato.

    Una volta salvato il terreno per una scena, puoi caricarlo rapidamente nuovamente nel servizio di livello superiore Terrain facendo clic su Carica terreno dalla finestra del plugin.

Riferimento API

Ganci di ciclo di vita dello schema

Su Setup

Il hook del ciclo di vita OnSetup è destinato all'inizializzazione di risorse e variabili che saranno richiamate in OnRun o OnEndScene, impostando connections che sono destinate a durare per la durata della scena, ecc.Questo hook riceve il parametro timePositionObject che ti consente di leggere l'ora attuale durante l'installazione.

Schema 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)")
-- Ambienti della scena di accesso; non si applica alla modalità inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- Aspetta le risorse
dummy = clientEnvironment:WaitForChild("Dummy")
print("Current time is:", timePositionObject.Value)
end
Schema del server

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)")
-- Ambiente della scena di accesso; non si applica alla modalità inline
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("Current time is:", timePositionObject.Value)
end

Su esecuzione

OnRun è il principale hook del ciclo di vita operativo all'interno di un schema.Dovrebbe contenere tutte le configurazioni a tempo per la scena, dal riproduzione di audio o un'animazione a programmazione di un evento come un display di fuochi d'artificio.

Schema 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

Sulla scena finale

Il hook di ciclo di vita OnEndScene è utile per pulire tutto ciò che è in sospeso nella scena, come la disconnessione delle connessioni create in OnSetup o OnRun che rimangono per la durata della scena.

Schema del server

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

Configurazioni di schema

audio/suono

Crea un oggetto Sound nell'area di lavoro che suona a un certo momento.Il suono viene quindi eliminato dopo che la scena è finita o dopo che l'oggetto Sound finisce di suonare.

Chiave di configurazioneDescrizione
StartTimeQuando riprodurre l'audio in relazione alla durata della scena, in secondi.
SoundIdID risorsa dell'audio da Giocare.
OnStartFunzione personalizzata da attivare quando l'audio inizia a suonare.
OnEndFunzione personalizzata da attivare quando l'audio finisce di riprodursi.
VolumeVolume dell'oggetto Sound ; il valore predefinito è 0.5.
Schema 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

animare

Crea un Animation che suona a un certo momento.

Chiave di configurazioneDescrizione
StartTimeQuando giocare l'animazione in relazione alla durata della scena, in secondi.
EndTimeTempo opzionale quando terminare l'animazione in relazione alla durata della scena, in secondi.
RigIl rig di animazione per riprodurre l'animazione.
AnimationIdID risorsa dell'animazione da Giocare.
SpeedVelocità di riproduzione dell'animazioni; la predefinita è 1.
FadeInTimeQuantità di tempo per scomparire nell'animazioni, in secondi; il valore predefinito è 0.2 (secondi).
FadeOutTimeQuantità di tempo per dissipare l'animazioni, in secondi; il valore predefinito è 0.2 (secondi).
OnStartFunzione personalizzata da attivare quando l'animazione inizia a giocare.
OnEndFunzione personalizzata da attivare quando l'animazione finisce di giocare.
LoopedSe ripetere l'animazioni; il valore predefinito è false .
SyncToAudioTabella che definisce se sincronizzare l'animazione a una configurazione audio. Accetta le seguenti chiavi:
  • Audio – Riferimento a una configurazione audio .
  • StartAtAudioTime – Quando giocare l'animazione in relazione alla durata dell'audio/suono.
  • EndAtAudioTime – Tempo opzionale in cui terminare l'animazione in relazione alla durata dell'audio/suono.
Schema 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

gemellati

Crea un configurabile Tween che viene preservato in cerca e in join dinamico, il che significa che puoi incatenare gli adolescenti in punti separati nel tempo e tutto dovrebbe giocare e sincronizzarsi come previsto.

Chiave di configurazioneDescrizione
StartTimesTabella degli orari di inizio in relazione alla durata della scena, in secondi.
TweenTabella che definisce l'oggetto e le proprietà da passare gemellati. Accetta le seguenti chiavi:
  • Object – L'oggetto da gemellati.
  • InfoTweenInfo istanza per l'adolescente, che definisce la sua durata, Enum.EasingStyle , Enum.EasingDirection , ecc.
  • Properties – Proprietà dell'oggetto e valori target associati per il gemellati.
OnStartFunzione personalizzata da attivare quando l'adolescente inizia a suonare.
OnHeartbeatFunzione personalizzata da attivare ogni Heartbeat ; riceve l'alfa tween come suo secondo parametro.
OnEndFunzione personalizzata da attivare quando il tween finisce di giocare.
SyncToAudioTabella che definisce se sincronizzare il tween a una configurazione audio. Accetta le seguenti chiavi:
  • Audio – Riferimento a una configurazione audio .
  • StartAtAudioTimes – Tabella di tempi di inizio che definisce quando giocare il tween in relazione alla durata dell'audio/suono.
Schema 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

intervallo

Esegue una funzione di richiamo personalizzata per una durata specificata su una frequenza specificata, in secondi.Utile per ripetere eventi come lampeggiamenti, l'intensità di un audio/suono, ecc.La frequenza più bassa possibile è di 0 secondi, ma tecnicamente la frequenza minima è sempre limitata a Heartbeat .

Chiave di configurazioneDescrizione
StartTimeInizio della durata dell'intervallo rispetto alla durata della scena, in secondi.
EndTimeFine della durata dell'intervallo rispetto alla durata della scena, in secondi.
FrequencyQuante volte la funzione OnInterval dovrebbe essere Lanciare, in secondi, con la prima esecuzione che è a StartTime .
OnStartFunzione personalizzata da attivare quando inizia la serie di intervalli.
OnIntervalFunzione personalizzata da attivare ad ogni intervallo all'interno della durata specificata ( StartTime a EndTime ).
OnEndFunzione personalizzata da attivare quando la serie di intervalli termina.
SyncToAudioTabella che definisce se sincronizzare la durata dell'intervallo a una configurazione audio. Accetta le seguenti chiavi:
  • Audio – Riferimento a una configurazione audio .
  • StartAtAudioTime – Quando avviare la durata dell'intervallo in relazione alla durata dell'audio/suono.
  • EndAtAudioTime – Tempo opzionale in cui terminare la durata dell'intervallo rispetto alla durata dell'audio/suono.
Schema 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

Simile a intervallo except that puoi definire più tempi di inizio specifici per lo stesso evento, come la programmazione di un display di fuochi d'artificio due volte in una scena.

Chiave di configurazioneDescrizione
StartTimesTabella degli orari di inizio in relazione alla durata della scena, in secondi.
OnStartFunzione personalizzata da eseguire a ogni ora specificata nella tabella StartTimes.
SkippableBoolean definire se l'evento programmato può essere saltato per gli utenti che si uniscono in ritardo, o per quando si cerca prima di un'ora di avvio programmata.Se impostato su false, tutti i tempi di inizio degli eventi programmati prima del tempo di join/seek si verificheranno a quel tempo di join/seek.Se impostato su true , si Si verificanosolo il tempo di inizio programmato dopo unirsi/cercare.Il predefinito è false .
SyncToAudioTabella che definisce se sincronizzare l'agenda a una configurazione audio. Accetta le seguenti chiavi:
  • Audio – Riferimento a una configurazione audio .
  • StartAtAudioTimes – Tabella di tempi di avvio che definisce quando eseguire la funzione OnStart in relazione alla durata dell'audio/suono.
Schema cliente

Schema.OnRun = function()
print("OnRun (Client)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- Inizializza la connessione battito cardiaco temporanea
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- Informare il framework di connessione
Schema:inform(tempConnection)
end
})
end

informare

Informa il framework di qualsiasi modulo, oggetti UI, connessioni, ecc.che vengono creati nel hook del ciclo di vita OnRun, assicurandosi che vengano puliti correttamente quando cerca.Gli casi d'uso includono:

  • Informare il framework di una connessione temporanea ad hoc come RunService.Heartbeat in modo che la connessione venga pulita quando si cerca un punto precedente della durata della scena.

    Schema del server

    Schema.OnRun = function()
    print("OnRun (Server)")
    Schema:schedule({
    StartTimes = {5},
    OnStart = function(self)
    -- Inizializza la connessione battito cardiaco temporanea
    local tempConnection = RunService.Heartbeat:Connect(function()
    end)
    -- Informare il framework di connessione
    Schema:inform(tempConnection)
    end
    })
    end
  • Chiamare una funzione "Pulire" personalizzata in un ModuleScript che inizializza una connessione o un altro riferimento durante il hook di vita OnRun .

    Schema del server

    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)
    -- Chiama la funzione "init" nel modulo personalizzato
    customModule.init()
    -- Chiama la funzione "clean" nel modulo personalizzato durante la pulizia della scena
    Schema:inform(customModule, customModule.clean)
    end,
    })
    end
    ModuleScript - Modulo personalizzato

    local RunService = game:GetService("RunService")
    local CustomModule = {}
    CustomModule.init = function()
    -- Inizializza la connessione battito cardiaco
    CustomModule.connection = RunService.Heartbeat:Connect(function()
    end)
    end
    CustomModule.clean = function()
    -- Disconnetti e svuota la connessione del battito cardiaco
    if CustomModule.connection then
    CustomModule.connection:Disconnect()
    CustomModule.connection = nil
    end
    end
    return CustomModule

Functioni

caricareScene

loadScene(sceneName: string , startTime: number ?)

Carica programmaticamente una scena da sceneName e la avvia da startTime dal suo inizio.Ci sarà un periodo di 5 secondi di "grace" per la scena per caricare dal server prima che avvenga la ricerca e la scena inizi a giocare.Questo significa che se chiami loadScene("[SceneName]", 20) alle 4:15:00 PM, il framework attenderà 5 secondi in aggiunta ai 20 richiesti, dando inizio alla scena alle 4:15:25 PM.

Scrittura

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Individua la prossima scena da caricare quando la scena attuale finisce
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- Finito "PreShow"; carica la prima scena nel concerto
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- Track1 è finito; carica la seconda scena nel concerto
EventSequencer.loadScene("Track2")
else
-- Loop indietro alla scena pre-show
EventSequencer.loadScene("PreShow")
end
end)

creare Schema

createSchema(): table

Restituisce un'istanza dello schema della scena schema per creare una logica per la scena.

Schema cliente

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
end

cercare

cerca(tempo: number)

Cerca il valore time in secondi, dall'inizio della scena attualmente caricata.

Scrittura

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

Imposta il tempo di avviso della scena

setSceneWarningTime(endSceneTimeWindow: number )

Imposta la quantità di tempo dall' fine di tutte le scene in cui viene inviato un avviso.Puoi rilevare l'avviso sia sul lato client attraverso onSceneEndingWarningForClient che sul lato server attraverso onSceneEndingWarningForServer.

Scrittura

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Carica la scena
EventSequencer.loadScene("BeautifulScene")
-- Imposta il tempo di avvertimento a 5 secondi prima che la scena finisca
EventSequencer.setSceneWarningTime(5)
-- Rileva quando la scena sta per Terminare
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)

setSeekingPermsenti

setSeekingPermissions(permessi: table )

Garanzie che richiedono il permesso in base all'evento di e inoltre a gruppi specifici e/o ruoli all'interno di essi.Vedi cercare e cambiare le scene per ulteriori informazioni.

ottenere l'ambiente della scena attuale

getCurrentSceneEnvironment(): Folder (YIELDS)

Restituisce la cartella Ambiente del lato client o lato server della scena attuale, a seconda se viene chiamata dallo script di schema Client o Server, rispettivamente.

Schema 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)")
-- Ambienti della scena di accesso; non si applica alla modalità inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end
Schema del server

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

ottenere l'ambiente server corrente dall'client

getCurrentServerEnvironmentFromClient(): Folder (YIELDS)

Restituisce la cartella Server-side Ambiente della scena corrente.A differenza di getCurrentSceneEnvironment, puoi chiamarlo dallo script dello schema Client.

Schema 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)")
-- Ambienti della scena di accesso; non si applica alla modalità inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end

èCaricamentoScena

isLoadingScene(): boolean

Chiamato dal server per sapere se una scena è attualmente in caricamento.

Scrittura

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
print(EventSequencer.isLoadingScene())
while EventSequencer.isLoadingScene() do
task.wait()
end
print("Scene loaded")

Eventi

sulla fine della scena di警告 per il client

Fuochi sul client prima che la scena stia per Terminare.Il tempo predefinito è di 3 secondi, ma puoi configurarlo attraverso setSceneWarningTime.Questo evento può essere connesso solo in un LocalScript .

Script locale

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Rileva quando la scena è about to end (lato client)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("Scene is about to end!")
end)

sulla fine della scena di警告 per il server

Fuochi sul server prima che la scena stia per Terminare.Il tempo predefinito è di 3 secondi, ma puoi configurarlo attraverso setSceneWarningTime.Questo evento può essere connesso solo in un Script .

Scrittura

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Rileva quando la scena è about to end (lato server)
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)

onSceneLoadedForClient

Fuochi sul client quando la scena sta iniziando. Questo evento può essere collegato solo in un LocalScript .

Script locale

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Rileva quando la scena inizia (lato client)
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("Scene is starting!")
end)

suOrchestrazioneFinita

Fuochi sul server quando una scena ha raggiunto la sua durata del tempo e si è effettivamente conclusa.Questo evento riceve un argomento nome stringa endedSceneName per la scena che è appena finita e puoi incatenare questo evento per caricare condizionalmente un'altra scena .Può essere connesso solo in un Script .

Scrittura

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Individua la prossima scena da caricare quando la scena attuale finisce
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- Finito "PreShow"; carica la prima scena nel concerto
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- Track1 è finito; carica la seconda scena nel concerto
EventSequencer.loadScene("Track2")
else
-- Loop indietro alla scena pre-show
EventSequencer.loadScene("PreShow")
end
end)