Séquenceur d'événements est un puissant cadre qui vous permet de créer des événements en direct et des cinématiques inter-serveurs sur une séquence structurée d'actions et de déclencheurs. Plus précisément, ce module vous aide à :
- Créer un événement ou une cinématique sur un cadre structuré grâce à des configurations programmées d'audio, d'animations et de tweens.
- Passer d'une scène à l'autre sur plusieurs serveurs, synchronisant des animations et des visuels complexes à une chronologie.
- Rechercher à travers un événement et prévisualiser le jeu à des fins de test et de développement.
Ce cadre a été testé en conditions réelles lors d'événements Roblox tels que les concerts de Twenty One Pilots et 24kGoldn, ainsi que de nombreux jeux très visités.
Pour voir Séquenceur d'événements en action dans un lieu modifiable, consultez le modèle Concert dans Roblox Studio. Ce modèle est un point de départ complet pour les développeurs afin de créer des événements/concerts et de se familiariser avec les différentes fonctionnalités et composants impliqués.

Utilisation du module
Installation
Pour utiliser le cadre Séquenceur d'événements dans un jeu :
Dans le menu Fenêtre de Studio ou la barre d'outils de l'onglet Accueil, ouvrez la Boîte à outils et sélectionnez l'onglet Magasin de créateurs.

Assurez-vous que le tri par Modèles est sélectionné, puis cliquez sur le bouton Voir tout pour Catégories.

Localisez et cliquez sur le carreau Packages.
Localisez le module Séquenceur d'événements et cliquez dessus, ou faites-le glisser dans la vue 3D.

Dans la fenêtre Explorateur, déplacez l'ensemble du modèle Séquenceur d'événements dans ServerScriptService. Lors de l'exécution du jeu, le module commencera à s'exécuter.
Modes de cadre
Mode de remplacement
Le mode de cadre par défaut est le mode de remplacement dans lequel vous concevez des scènes uniques en plaçant des objets 3D, des terrains, des propriétés d'éclairage, des effets environnementaux, et des objets d'interface utilisateur dans le dossier Environnement de cette scène. Lorsqu'une scène se charge, ces objets et propriétés sont distribués dans Workspace, Terrain, et Lighting, remplaçant les objets/propriétés existants pour former un espace cloné.
Mode en ligne
Un mode de cadre alternatif est le mode en ligne dans lequel vous concevez également des scènes uniques avec une logique de script pour leur flux/événements, mais le cadre ne détruira pas les objets 3D, terrains, propriétés d'éclairage, effets environnementaux, et objets d'interface utilisateur existants afin de cloner des actifs/propriétés à partir du dossier Environnement d'une scène lors du chargement.
Pour activer le mode en ligne :
Dans le modèle Séquenceur d'événements que vous avez placé dans ServerScriptService, développez et sélectionnez la valeur En ligne dans le dossier ReplicatedStorage.

Dans la fenêtre Propriétés, activez la case à cocher Valeur.

Créer des scènes
Une scène est essentiellement une partie d'un événement global ou d'une cinématique enveloppée dans une série de dossiers. Chaque scène contient une logique de script qui définit son flux/événements, et une scène peut stocker ses propres objets 3D, terrains, propriétés d'éclairage, effets environnementaux, et objets d'interface utilisateur.
Pour commencer rapidement, vous pouvez trouver une scène vide dans le dossier principal du module :
Développez le dossier Séquenceur d'événements et localisez le dossier BlankScene.

Déplacez ou copiez l'ensemble du dossier BlankScene dans ReplicatedStorage.

Durée
Chaque scène doit avoir une durée, en secondes, définissant sa durée — tout comme un film ou un concert a une durée définie. La durée est définie comme un attribut numérique dans le dossier de la scène nommé TimeLength que vous pouvez définir directement dans Studio ou par programmation via Instance:SetAttribute().


Environnement
Le dossier Environnement d'une scène contient tout ce que les utilisateurs voient et entendent, y compris des objets 3D, des terrains, des propriétés d'éclairage et des effets environnementaux, ainsi que des objets d'interface utilisateur. Lorsqu'une scène se charge, ces objets et propriétés sont distribués dans Workspace, Terrain, et Lighting, remplaçant les objets/propriétés existants pour former un espace cloné.
Le dossier Environnement contient les conteneurs suivants :
| Conteneur | Description |
|---|---|
| Client | Contient tous les actifs à charger lorsque tout utilisateur (client) rejoint l'événement, tels que des objets d'interface utilisateur ou un rig d'animation. |
| PlayerSpawns | Contient des parties où les utilisateurs apparaissent lors de leur arrivée. Toute partie dans ce dossier se comporte de manière similaire à un SpawnLocation. |
| Serveur | Contient tous les actifs à charger lorsque la scène est d'abord créée sur un serveur. Il est recommandé que la plupart des actifs visuels aillent ici. |
| Terrain | Contient le terrain de la scène. |
| Éclairage | Contient les propriétés d'éclairage globales en tant qu'attributs, ainsi que des modificateurs comme les effets atmosphériques et les effets de post-traitement. |
Événements
Le dossier Événements d'une scène est purement un espace réservé pour les RemoteEvents qui communiquent entre les modules Client et Serveur. Il n'est pas nécessaire d'y placer quoi que ce soit.
Client
Ce script exécute la logique de schéma sur le client.
Serveur
Ce script exécute la logique de schéma sur le serveur.
Schémas de scène
Le schéma d'une scène définit ce qui se passe à quel moment dans la chronologie de la scène. Vous devez définir le schéma d'une scène dans ses modules Client et Serveur et inclure des hooks de cycle de vie pour gérer quand les configurations se produisent.
Hooks de cycle de vie
Les hooks de cycle de vie de schéma vous permettent de gérer quand les opérations de scène se produisent. Une scène en production s'exécutera généralement dans le flux le plus simple :
OnRun peut être interrompu lors de la recherche :
Tous les trois hooks peuvent également se répéter si la scène est rejouée :
Configurations
Les configurations de schéma définissent les opérations de base d'une scène, par exemple jouer de l'audio à 00:32, mettre en file d'attente une animation pour synchroniser avec cet audio, programmer un événement de scène comme un spectacle de feux d'artifice, et plus encore. Chaque configuration prend en charge certaines fonctions de rappel où le premier paramètre (self) est l'instance de configuration.
Rechercher des scènes
Une fonctionnalité unique de Séquenceur d'événements est la capacité de "chercher" à travers les scènes comme vous pourriez le faire avec une vidéo. En Mode de remplacement, vous pouvez également passer d'une scène à l'autre pour prévisualiser un événement multi-scènes entier avant de le déployer en production.
La recherche de scène n'est pas accessible à tout le monde puisque les utilisateurs qui profitent simplement de l'événement ne devraient pas avoir la capacité de contrôler son flux temporel. Au lieu de cela, vous devez accorder la permission de recherche en fonction de l'PlaceId de l'événement ainsi que des UserIds spécifiques et/ou des groupes et des rôles au sein de ceux-ci.
Créez un nouveau Script dans ServerScriptService.
Collez le code suivant dans le nouveau script.
Script - Définir les permissions de recherchelocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.setSeekingPermissions({placeIDs = {},userIDs = {},groups = {{GroupID = , MinimumRankID = },}})Remplissez les tableaux suivants dans l'appel setSeekingPermissions comme suit :
placeIDs Liste délimitée par des virgules des valeurs PlaceId pour prendre en charge la recherche. userIDs Liste délimitée par des virgules des UserIds pour ceux qui peuvent rechercher dans les lieux pris en charge. groups Liste délimitée par des virgules de tables, chacune contenant un ID de groupe et le rang minimum des membres de ce groupe qui peuvent rechercher dans les lieux pris en charge.
Plugin de gestion de scène
Le plugin Gestionnaire de scène est un outil utile pour charger et décharger des scènes, éclairage, et terrain. À moins que vous n'utilisiez le Mode en ligne, il est fortement recommandé d'utiliser ce plugin au lieu de placer/modifier manuellement des objets et propriétés de scène.
Pour installer le plugin :
Dans le menu Fenêtre de Studio ou la barre d'outils de l'onglet Accueil, ouvrez la Boîte à outils.
Avec l'onglet Magasin de créateurs sélectionné, sélectionnez Plugins dans le menu déroulant.
Dans le champ de recherche, tapez Gestionnaire de scène et appuyez sur Entrée pour localiser le plugin.

Cliquez sur l'icône du plugin pour voir ses détails, puis cliquez sur le bouton Installer.
Une fois le plugin installé, il apparaît dans l'onglet Plugins de Studio.
Charger et décharger des scènes
Comme décrit dans créer des scènes, le dossier Environnement d'une scène contient tout ce que les utilisateurs voient et entendent, y compris des objets 3D. Le plugin vous aide à charger rapidement les actifs d'une scène dans ou hors de dossiers organisés au sein de l'espace de travail.
| Action du plugin | Description |
|---|---|
| Charger Client | Si le contenu client de la scène est déchargé, déplace son dossier Environnement/Client dans le dossier Workspace/ScenesClient. |
| Charger Serveur | Si le contenu serveur de la scène est déchargé, déplace son dossier Environnement/Serveur dans le dossier Workspace/ScenesServer. |
| Décharger Client | Si le contenu client de la scène est chargé, déplace son dossier Client de Workspace/ScenesClient vers le dossier [Scene]/Environnement. |
| Décharger Serveur | Si le contenu serveur de la scène est chargé, déplace son dossier Serveur de Workspace/ScenesServer vers le dossier [Scene]/Environnement. |
| Décharger toutes les scènes | Déplace le dossier Client et Serveur de chaque scène chargée vers son dossier Environnement. |
Enregistrer et charger l'éclairage
Le service Lighting de niveau supérieur stocke toutes les propriétés d'éclairage et les effets visuels d'un lieu. Étant donné qu'il s'agit d'un service de niveau supérieur, vous ne pouvez pas le déplacer manuellement vers le dossier Environnement/Serveur ou Environnement/Client d'une scène particulière. Au lieu de cela, vous pouvez utiliser le plugin pour copier ses propriétés et enfants dans le dossier Environnement/Éclairage de la scène.
Configurez les propriétés d'éclairage de la scène, les effets de post-traitement, les effets atmosphériques, et les ciels via le service Lighting de niveau supérieur.

Dans la fenêtre du plugin Gestionnaire de scène, cliquez sur Enregistrer l'éclairage pour la scène souhaitée.
Sélectionnez et développez la configuration Environnement/Éclairage de cette scène et vous verrez les mêmes propriétés d'éclairage en tant qu'attributs du dossier, ainsi que des enfants clonés du service Lighting de niveau supérieur.

Instances clonées 
Attributs enregistrés Une fois que les propriétés d'éclairage et les enfants sont enregistrés pour une scène, vous pouvez rapidement les recharger dans le service Lighting de niveau supérieur en cliquant sur Charger l'éclairage depuis la fenêtre du plugin.
Enregistrer et charger le terrain
Étant donné que Terrain est une classe de niveau supérieur au sein de Workspace, vous ne pouvez pas déplacer manuellement le terrain généré ou sculpté vers le dossier Environnement/Serveur ou Environnement/Client d'une scène particulière. Au lieu de cela, vous pouvez utiliser le plugin pour le copier dans le dossier Environnement/Terrain de la scène.
Configurez le terrain de la scène via le service Terrain de niveau supérieur.

Dans la fenêtre du plugin Gestionnaire de scène, cliquez sur Enregistrer le terrain pour la scène souhaitée.
Sélectionnez et développez le dossier Environnement/Terrain de cette scène et vous verrez un objet TerrainRegion qui représente le terrain enregistré.

Une fois que le terrain est enregistré pour une scène, vous pouvez rapidement le recharger dans le service Terrain de niveau supérieur en cliquant sur Charger le terrain depuis la fenêtre du plugin.
Référence API
Hooks de cycle de vie de schéma
OnSetup
Le hook de cycle de vie OnSetup est destiné à initialiser des actifs et des variables qui seront référencés dans OnRun ou OnEndScene, à configurer des connexions qui sont destinées à durer pendant la durée de la scène, etc. Ce hook reçoit le paramètre timePositionObject qui vous permet de lire le temps actuel lors de la configuration.
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)")
-- Accéder aux environnements de scène ; ne s'applique pas au Mode en ligne
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- Attendre les actifs
dummy = clientEnvironment:WaitForChild("Dummy")
print("Le temps actuel est :", timePositionObject.Value)
endlocal 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 (Serveur)")
-- Accéder à l'environnement de scène ; ne s'applique pas au Mode en ligne
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("Le temps actuel est :", timePositionObject.Value)
endOnRun
OnRun est le hook de cycle de vie opérationnel principal au sein d'un schéma. Il doit contenir toutes les configurations chronométrées pour la scène, de la lecture de l'audio ou d'une animation à la programmation d'un événement comme un feu d'artifice.
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("Audio en cours de lecture")
end,
OnEnd = function(self)
print("Audio terminé")
end
})
endOnEndScene
Le hook de cycle de vie OnEndScene est utile pour nettoyer tout ce qui reste dans la scène, comme déconnecter les connexions créées dans OnSetup ou OnRun qui restent pendant la durée de la scène.
Schema.OnEndScene = function()
print("OnEndScene (Serveur)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
endConfigurations de schéma
audio
Crée un objet Sound dans l'espace de travail qui joue à un certain moment. Le son est ensuite supprimé après la fin de la scène ou après que l'objet Sound a fini de jouer.
| Clé de configuration | Description |
|---|---|
| StartTime | Quand jouer l'audio par rapport à la durée de la scène, en secondes. |
| SoundId | ID d'actif de l'audio à jouer. |
| OnStart | Fonction personnalisée à déclencher lorsque l'audio commence à jouer. |
| OnEnd | Fonction personnalisée à déclencher lorsque l'audio a fini de jouer. |
| Volume | Volume de l'objet Sound ; la valeur par défaut est 0.5. |
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("Audio en cours de lecture")
end,
OnEnd = function(self)
print("Audio terminé")
end
})
endanimate
Crée une Animation qui joue à un certain moment.
| Clé de configuration | Description |
|---|---|
| StartTime | Quand jouer l'animation par rapport à la durée de la scène, en secondes. |
| EndTime | Temps optionnel pour mettre fin à l'animation par rapport à la durée de la scène, en secondes. |
| Rig | Le rig d'animation sur lequel jouer l'animation. |
| AnimationId | ID d'actif de l'animation à jouer. |
| Speed | Vitesse de lecture de l'animation ; la valeur par défaut est 1. |
| FadeInTime | Temps nécessaire pour faire apparaître l'animation, en secondes ; la valeur par défaut est 0.2 (secondes). |
| FadeOutTime | Temps nécessaire pour faire disparaître l'animation, en secondes ; la valeur par défaut est 0.2 (secondes). |
| OnStart | Fonction personnalisée à déclencher lorsque l'animation commence à jouer. |
| OnEnd | Fonction personnalisée à déclencher lorsque l'animation a fini de jouer. |
| Looped | Indique si l'animation doit être en boucle ; la valeur par défaut est false. |
| SyncToAudio | Table définissant si l'animation doit être synchronisée avec une configuration audio. Accepte les clés suivantes :
|
Schema.OnRun = function()
print("OnRun (Client)")
local MainAudio = Schema:audio({
AnimationId = "rbxassetid://3695333486",
Rig = Dummy,
Speed = 1,
FadeInTime = 0.1,
FadeOutTime = 0.3,
SyncToAudio = {
Audio = MainAudio,
StartAtAudioTime = 5,
},
OnStart = function(self)
print("Animation en cours de lecture")
end,
OnEnd = function(self)
print("Animation arrêtée")
end
})
endtween
Crée un Tween configurable qui est préservé dans la recherche et dans l'entrée dynamique, ce qui signifie que vous pouvez enchaîner des tweens à des moments séparés et que tout devrait jouer et se synchroniser comme prévu.
| Clé de configuration | Description |
|---|---|
| StartTimes | Table des temps de début par rapport à la durée de la scène, en secondes. |
| Tween | Table définissant l'objet et les propriétés à tweener. Accepte les clés suivantes :
|
| OnStart | Fonction personnalisée à déclencher lorsque le tween commence à jouer. |
| OnHeartbeat | Fonction personnalisée à déclencher à chaque Heartbeat ; reçoit l'alpha du tween comme deuxième paramètre. |
| OnEnd | Fonction personnalisée à déclencher lorsque le tween a fini de jouer. |
| SyncToAudio | Table définissant si le tween doit être synchronisé avec une configuration audio. Accepte les clés suivantes :
|
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 en cours de lecture")
end,
OnHeartbeat = function(self, alpha)
print("Alpha du tween", alpha)
end,
OnEnd = function(self)
print("Tween terminé")
end,
})
endinterval
Exécute une fonction de rappel personnalisée sur une durée spécifiée à une fréquence spécifiée, en secondes. Utile pour des événements répétitifs comme des lumières clignotantes, pulser l'intensité d'un audio, etc. La fréquence la plus basse possible est de 0 secondes, mais techniquement la fréquence minimale est toujours limitée à Heartbeat.
| Clé de configuration | Description |
|---|---|
| StartTime | Début de la durée de l'intervalle par rapport à la durée de la scène, en secondes. |
| EndTime | Fin de la durée de l'intervalle par rapport à la durée de la scène, en secondes. |
| Frequency | À quelle fréquence la fonction OnInterval doit être déclenchée, en secondes, avec la première exécution se produisant à StartTime. |
| OnStart | Fonction personnalisée à déclencher lorsque la série d'intervalles commence. |
| OnInterval | Fonction personnalisée à déclencher à chaque intervalle dans la durée spécifiée (StartTime à EndTime). |
| OnEnd | Fonction personnalisée à déclencher lorsque la série d'intervalles se termine. |
| SyncToAudio | Table définissant si la durée de l'intervalle doit être synchronisée avec une configuration audio. Accepte les clés suivantes :
|
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,
})
endschedule
Similaire à interval sauf que vous pouvez définir plusieurs temps de début spécifiques pour le même événement, comme programmer un feu d'artifice deux fois dans une scène.
| Clé de configuration | Description |
|---|---|
| StartTimes | Table des temps de début par rapport à la durée de la scène, en secondes. |
| OnStart | Fonction personnalisée à déclencher à chaque temps spécifié dans la table StartTimes. |
| Skippable | Booléen définissant si l'événement programmé peut être sauté pour les utilisateurs qui rejoignent tard, ou pour ceux qui cherchent à l'avance d'un temps de début programmé. S'il est défini sur false, tous les temps de début d'événements programmés avant le temps de rejoindre/rechercher se produiront à ce temps de rejoindre/rechercher. S'il est défini sur true, seuls les temps de début programmés après le temps de rejoindre/rechercher se produiront. La valeur par défaut est false. |
| SyncToAudio | Table définissant si la programmation doit être synchronisée avec une configuration audio. Accepte les clés suivantes :
|
Schema.OnRun = function()
print("OnRun (Client)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- Initialiser la connexion temporaire de battement
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- Informer le cadre de la connexion
Schema:inform(tempConnection)
end
})
endinform
Informe le cadre de tout module, objet UI, connexion, etc. qui sont créés dans le hook de cycle de vie OnRun, garantissant qu'ils sont correctement nettoyés lors de la recherche. Les cas d'utilisation incluent :
Informer le cadre d'une connexion temporaire ad hoc telle que RunService.Heartbeat afin que la connexion soit nettoyée lors de la recherche vers un point antérieur dans la durée de la scène.
Schéma ServeurSchema.OnRun = function()print("OnRun (Serveur)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Initialiser la connexion temporaire de battementlocal tempConnection = RunService.Heartbeat:Connect(function()end)-- Informer le cadre de la connexionSchema:inform(tempConnection)end})endAppeler une fonction de "nettoyage" personnalisée dans un ModuleScript qui initialise une connexion ou une autre référence pendant le hook de cycle de vie OnRun.
Schéma Serveurlocal 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 (Serveur)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Appeler la fonction "init" dans le module personnalisécustomModule.init()-- Appeler la fonction "clean" dans le module personnalisé lors du nettoyage de la scèneSchema:inform(customModule, customModule.clean)end,})endModuleScript - CustomModulelocal RunService = game:GetService("RunService")local CustomModule = {}CustomModule.init = function()-- Initialiser la connexion de battementCustomModule.connection = RunService.Heartbeat:Connect(function()end)endCustomModule.clean = function()-- Déconnecter et effacer la connexion de battementif CustomModule.connection thenCustomModule.connection:Disconnect()CustomModule.connection = nilendendreturn CustomModule
Fonctions
loadScene
loadScene(sceneName: string, startTime: number ?)
Charge programmé une scène par sceneName et la démarre à startTime depuis son début. Il y aura une "période de grâce" de 5 secondes pour que la scène se charge depuis le serveur avant que la recherche ne se produise et que la scène commence à jouer. Cela signifie que si vous appelez loadScene("[SceneName]", 20) exactement à 16h15, le cadre attendra 5 secondes en plus des 20 demandées, lançant la scène à 16h15:25.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Déterminer la prochaine scène à charger lorsque la scène actuelle se termine
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- "PreShow" terminé ; charger la première scène du concert
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- "Track1" terminé ; charger la deuxième scène du concert
EventSequencer.loadScene("Track2")
else
-- Revenir à la scène de pré-spectacle
EventSequencer.loadScene("PreShow")
end
end)createSchema
createSchema(): table
Renvoie une instance du schéma de scène pour créer la logique de la scène.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
endseek
seek(time: number)
Recherche la valeur time, en secondes, depuis le début de la scène actuellement chargée.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
EventSequencer.seek(95.58)setSceneWarningTime
setSceneWarningTime(endSceneTimeWindow: number)
Définit la durée à partir de la fin de toutes les scènes à laquelle un avertissement est envoyé. Vous pouvez détecter l'avertissement soit côté client via onSceneEndingWarningForClient soit côté serveur via onSceneEndingWarningForServer.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Charger la scène
EventSequencer.loadScene("BeautifulScene")
-- Définir le temps d'avertissement à 5 secondes avant la fin de la scène
EventSequencer.setSceneWarningTime(5)
-- Détecter quand la scène est sur le point de se terminer
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("La scène est sur le point de se terminer !")
end)setSeekingPermissions
setSeekingPermissions(permissions: table)
Accorde la permission de recherche en fonction de l'PlaceId de l'événement ainsi que des UserIds spécifiques et/ou des groupes et des rôles au sein de ceux-ci. Voir rechercher et changer de scènes pour plus d'informations.
getCurrentSceneEnvironment
getCurrentSceneEnvironment(): Folder (YIELDS)
Renvoie le dossier Environnement de la scène actuelle côté client ou serveur, selon qu'il est appelé depuis le script de schéma Client ou Serveur.
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)")
-- Accéder aux environnements de scène ; ne s'applique pas au Mode en ligne
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Le temps actuel est :", timePositionObject.Value)
endlocal 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 (Serveur)")
-- Accéder à l'environnement de scène ; ne s'applique pas au Mode en ligne
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
endgetCurrentServerEnvironmentFromClient
getCurrentServerEnvironmentFromClient(): Folder (YIELDS)
Renvoie le dossier serveur Environnement de la scène actuelle. Contrairement à getCurrentSceneEnvironment, vous pouvez appeler cela depuis le script de schéma Client.
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)")
-- Accéder aux environnements de scène ; ne s'applique pas au Mode en ligne
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Le temps actuel est :", timePositionObject.Value)
endisLoadingScene
isLoadingScene(): boolean
Appelé depuis le serveur pour savoir si une scène est actuellement en cours de chargement.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
print(EventSequencer.isLoadingScene())
while EventSequencer.isLoadingScene() do
task.wait()
end
print("Scène chargée")Événements
onSceneEndingWarningForClient
Se déclenche sur le client avant que la scène ne soit sur le point de se terminer. Le temps par défaut est de 3 secondes, mais vous pouvez le configurer via setSceneWarningTime. Cet événement ne peut être connecté que dans un LocalScript.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Détecter quand la scène est sur le point de se terminer (côté client)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("La scène est sur le point de se terminer !")
end)onSceneEndingWarningForServer
Se déclenche sur le serveur avant que la scène ne soit sur le point de se terminer. Le temps par défaut est de 3 secondes, mais vous pouvez le configurer via setSceneWarningTime. Cet événement ne peut être connecté que dans un Script.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Détecter quand la scène est sur le point de se terminer (côté serveur)
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("La scène est sur le point de se terminer !")
end)onSceneLoadedForClient
Se déclenche sur le client lorsque la scène commence. Cet événement ne peut être connecté que dans un LocalScript.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Détecter quand la scène commence (côté client)
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("La scène commence !")
end)onOrchestrationFinished
Se déclenche sur le serveur lorsqu'une scène a atteint sa durée et a effectivement pris fin. Cet événement reçoit un argument de chaîne endedSceneName pour la scène qui vient de se terminer et vous pouvez enchaîner cet événement pour charger conditionnellement une autre scène. Ne peut être connecté que dans un Script.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Déterminer la prochaine scène à charger lorsque la scène actuelle se termine
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- "PreShow" terminé ; charger la première scène du concert
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- "Track1" terminé ; charger la deuxième scène du concert
EventSequencer.loadScene("Track2")
else
-- Revenir à la scène de pré-spectacle
EventSequencer.loadScene("PreShow")
end
end)