Séquenceur d'événements

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

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 :

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

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

  3. Localisez et cliquez sur le carreau Packages.

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

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

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

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

  1. Développez le dossier Séquenceur d'événements et localisez le dossier BlankScene.

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

ConteneurDescription
ClientContient tous les actifs à charger lorsque tout utilisateur (client) rejoint l'événement, tels que des objets d'interface utilisateur ou un rig d'animation.
PlayerSpawnsContient des parties où les utilisateurs apparaissent lors de leur arrivée. Toute partie dans ce dossier se comporte de manière similaire à un SpawnLocation.
ServeurContient 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.
TerrainContient le terrain de la scène.
ÉclairageContient 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.

  1. Créez un nouveau Script dans ServerScriptService.

  2. Collez le code suivant dans le nouveau script.

    Script - Définir les permissions de recherche
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
    EventSequencer.setSeekingPermissions({
    placeIDs = {},
    userIDs = {},
    groups = {
    {GroupID = , MinimumRankID = },
    }
    })
  3. Remplissez les tableaux suivants dans l'appel setSeekingPermissions comme suit :

    placeIDsListe délimitée par des virgules des valeurs PlaceId pour prendre en charge la recherche.
    userIDsListe délimitée par des virgules des UserIds pour ceux qui peuvent rechercher dans les lieux pris en charge.
    groupsListe 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 :

  1. Dans le menu Fenêtre de Studio ou la barre d'outils de l'onglet Accueil, ouvrez la Boîte à outils.

  2. Avec l'onglet Magasin de créateurs sélectionné, sélectionnez Plugins dans le menu déroulant.

  3. Dans le champ de recherche, tapez Gestionnaire de scène et appuyez sur Entrée pour localiser le plugin.

  4. Cliquez sur l'icône du plugin pour voir ses détails, puis cliquez sur le bouton Installer.

  5. 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 pluginDescription
Charger ClientSi le contenu client de la scène est déchargé, déplace son dossier Environnement/Client dans le dossier Workspace/ScenesClient.
Charger ServeurSi le contenu serveur de la scène est déchargé, déplace son dossier Environnement/Serveur dans le dossier Workspace/ScenesServer.
Décharger ClientSi le contenu client de la scène est chargé, déplace son dossier Client de Workspace/ScenesClient vers le dossier [Scene]/Environnement.
Décharger ServeurSi 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ènesDé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.

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

  2. Dans la fenêtre du plugin Gestionnaire de scène, cliquez sur Enregistrer l'éclairage pour la scène souhaitée.

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

  1. Configurez le terrain de la scène via le service Terrain de niveau supérieur.

  2. Dans la fenêtre du plugin Gestionnaire de scène, cliquez sur Enregistrer le terrain pour la scène souhaitée.

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

Schéma Client
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)
end
Schéma Serveur
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 (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)
end

OnRun

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.

Schéma Client
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
})
end

OnEndScene

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.

Schéma Serveur
Schema.OnEndScene = function()
print("OnEndScene (Serveur)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
end

Configurations 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 configurationDescription
StartTimeQuand jouer l'audio par rapport à la durée de la scène, en secondes.
SoundIdID d'actif de l'audio à jouer.
OnStartFonction personnalisée à déclencher lorsque l'audio commence à jouer.
OnEndFonction personnalisée à déclencher lorsque l'audio a fini de jouer.
VolumeVolume de l'objet Sound ; la valeur par défaut est 0.5.
Schéma Client
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
})
end

animate

Crée une Animation qui joue à un certain moment.

Clé de configurationDescription
StartTimeQuand jouer l'animation par rapport à la durée de la scène, en secondes.
EndTimeTemps optionnel pour mettre fin à l'animation par rapport à la durée de la scène, en secondes.
RigLe rig d'animation sur lequel jouer l'animation.
AnimationIdID d'actif de l'animation à jouer.
SpeedVitesse de lecture de l'animation ; la valeur par défaut est 1.
FadeInTimeTemps nécessaire pour faire apparaître l'animation, en secondes ; la valeur par défaut est 0.2 (secondes).
FadeOutTimeTemps nécessaire pour faire disparaître l'animation, en secondes ; la valeur par défaut est 0.2 (secondes).
OnStartFonction personnalisée à déclencher lorsque l'animation commence à jouer.
OnEndFonction personnalisée à déclencher lorsque l'animation a fini de jouer.
LoopedIndique si l'animation doit être en boucle ; la valeur par défaut est false.
SyncToAudioTable définissant si l'animation doit être synchronisée avec une configuration audio. Accepte les clés suivantes :
  • Audio – Référence à une configuration audio.
  • StartAtAudioTime – Quand jouer l'animation par rapport à la durée de l'audio.
  • EndAtAudioTime – Temps optionnel auquel mettre fin à l'animation par rapport à la durée de l'audio.
Schéma Client
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
})
end

tween

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 configurationDescription
StartTimesTable des temps de début par rapport à la durée de la scène, en secondes.
TweenTable définissant l'objet et les propriétés à tweener. Accepte les clés suivantes :
OnStartFonction personnalisée à déclencher lorsque le tween commence à jouer.
OnHeartbeatFonction personnalisée à déclencher à chaque Heartbeat ; reçoit l'alpha du tween comme deuxième paramètre.
OnEndFonction personnalisée à déclencher lorsque le tween a fini de jouer.
SyncToAudioTable définissant si le tween doit être synchronisé avec une configuration audio. Accepte les clés suivantes :
  • Audio – Référence à une configuration audio.
  • StartAtAudioTimes – Table des temps de début définissant quand jouer le tween par rapport à la durée de l'audio.
Schéma Client
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,
})
end

interval

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 configurationDescription
StartTimeDébut de la durée de l'intervalle par rapport à la durée de la scène, en secondes.
EndTimeFin 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.
OnStartFonction personnalisée à déclencher lorsque la série d'intervalles commence.
OnIntervalFonction personnalisée à déclencher à chaque intervalle dans la durée spécifiée (StartTime à EndTime).
OnEndFonction personnalisée à déclencher lorsque la série d'intervalles se termine.
SyncToAudioTable définissant si la durée de l'intervalle doit être synchronisée avec une configuration audio. Accepte les clés suivantes :
  • Audio – Référence à une configuration audio.
  • StartAtAudioTime – Quand commencer la durée de l'intervalle par rapport à la durée de l'audio.
  • EndAtAudioTime – Temps optionnel auquel mettre fin à la durée de l'intervalle par rapport à la durée de l'audio.
Schéma Client
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

schedule

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 configurationDescription
StartTimesTable des temps de début par rapport à la durée de la scène, en secondes.
OnStartFonction personnalisée à déclencher à chaque temps spécifié dans la table StartTimes.
SkippableBoolé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.
SyncToAudioTable définissant si la programmation doit être synchronisée avec une configuration audio. Accepte les clés suivantes :
  • Audio – Référence à une configuration audio.
  • StartAtAudioTimes – Table des temps de début définissant quand déclencher la fonction OnStart par rapport à la durée de l'audio.
Schéma Client
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
})
end

inform

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 Serveur
    Schema.OnRun = function()
    print("OnRun (Serveur)")
    Schema:schedule({
    StartTimes = {5},
    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
    })
    end
  • Appeler 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 Serveur
    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 (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ène
    Schema:inform(customModule, customModule.clean)
    end,
    })
    end
    ModuleScript - CustomModule
    local RunService = game:GetService("RunService")
    local CustomModule = {}
    CustomModule.init = function()
    -- Initialiser la connexion de battement
    CustomModule.connection = RunService.Heartbeat:Connect(function()
    end)
    end
    CustomModule.clean = function()
    -- Déconnecter et effacer la connexion de battement
    if CustomModule.connection then
    CustomModule.connection:Disconnect()
    CustomModule.connection = nil
    end
    end
    return 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.

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)

createSchema

createSchema(): table

Renvoie une instance du schéma de scène pour créer la logique de la scène.

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

seek

seek(time: number)

Recherche la valeur time, en secondes, depuis le début de la scène actuellement chargée.

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

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

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)
end
Schéma Serveur
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 (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)
end

getCurrentServerEnvironmentFromClient

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.

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)
end

isLoadingScene

isLoadingScene(): boolean

Appelé depuis le serveur pour savoir si une scène est actuellement en cours de chargement.

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

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.

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.

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.

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)
©2026 Société Roblox. Roblox, le logo Roblox et Powering Imagination font partie de nos marques déposées aux États-Unis et dans d'autres pays.