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.

EventSequencer est un framework puissant qui vous permet de construire des événements en en ligne, des scènes croisées sur une séquence d'actions et de déclencheurs structurés.Plus précisément, ce module vous aide à :

  • Construire un événement ou une scène sur un framework structuré à travers des configurations planifiées d'audio, d'animations et d'adolescents.
  • transition entre plusieurs scènes sur plusieurs serveurs, en synchronisant des animations et des visuels complexes à une chronologie.
  • Recherchez à travers un événement et prévisualisez l'expérience à des fins de test et de développement.

Ce framework a été testé en combat dans des événements Roblox comme le Twenty One Pilots et 24kGoldn concerts, ainsi que de nombreuses expériences très visitées.

Pour voir EventSequencer en action dans un emplacementmodifiable, consultez le modèle Concert dans Roblox Studio.Ce modèle est un point de départ complet pour les développeurs de créer des événements/concerts et de se familiariser avec les différentes fonctionnalités et composants impliqués.

Utilisation du module

Étabissement

Pour utiliser le framework EventSequencer dans une expérience :

  1. De la vue, ouvrez la boîte à outils et sélectionnez l'onglet boutique des créateurs .

    Toolbox toggle button in Studio
  2. Assurez-vous que le tri des modèles est sélectionné, puis cliquez sur le bouton Voir tout pour les catégories .

  3. Localisez et cliquez sur la case modules de développement .

  4. Localisez le module séquenceur d'événements et cliquez dessus, ou glissez-déposez-le dans la voir3D.

  5. Dans la fenêtre Explorateur, déplacez l'ensemble du modèle séquenceur d'événements dans ServerScriptService .Une fois l'expérience exécutée, le module se distribuera à différents services et commencera à fonctionner.

Modes de framework

Mode de remplacement

Le mode cadre par défaut est remplacer le mode dans lequel vous concevez des scènes uniques en plaçant des objets 3D , du terrain , 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 de manière similaire des scènes uniques avec une logique de script pour leur flux/événements, mais le cadre ne détruira pas les objets 3D existants, le terrain, la logique d'éclairage, les effets environnementaux et les objets d'interface utilisateur afin de cloner les ressources/propriétés d'une scène de son dossier Environnement lors du chargement.

Pour activer le mode inline :

  1. À l'intérieur du modèle séquenceur d'événements que vous avez placé dans ServerScriptService , descendez et sélectionnez la valeur en ligne à l'intérieur du dossier ReplicatedStorage .

  2. Dans la fenêtre propriétés, activez sa case à cocher valeur .

Créer des scènes

Une scène est essentiellement partie d'un événement global ou d'une scène coupée emballé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, terrain, propriétés d'éclairage, effets environnementaux et objets d'interface utilisateur.

Pour commencer rapidement, vous pouvez trouver une scène vide à l'intérieur du 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 du temps

Chaque scène devrait avoir une durée de temps , en secondes, définissant sa durée — tout comme un film ou un concert a une durée définie.La durée du temps est définie comme un attribut numérique sur le dossier de la scène nommé durée du temps que vous pouvez définir directement dans Studio ou programmatiquement via .

Milieu

Le dossier environnement d'une scène contient tout ce que les utilisateurs voient et entendent, y compris objets 3D, terrain, propriétés d'éclairage et 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 :

ConteneurAvertissement
Client Contient toutes les ressources à charger lorsque tout utilisateur (client) rejoint l'événement, telles que des objets d'interface utilisateur ou un plateformed'animation.
Générations de joueurs Contient des parties où les utilisateurs apparaissent lorsqu'ils rejoignent. Toute partie de ce dossier se comporte de manière similaire à un SpawnLocation .
Serveur Contient toutes les ressources à charger lorsque la première scène est créée sur un serveur. Il est recommandé que la plupart des ressources visuelles aillent ici.
Terrain Contient le terrain de scène.
Éclairage Contient des propriétés d'éclairage globales en tant qu'attributs, ainsi que des modifieurs comme effets atmosphériques et effets de post-traitement.

Événements

Le dossier des événements d'une scène est purement un espace réservé pour qui communiquent entre les modules client et serveur .Ce n'est pas une exigence de placer quoi que ce soit dans ce dossier.

Client

Ce script exécute la logique du schéma sur le client.

Serveur

Ce script exécute la logique du schéma sur le serveur.

Schémas de scène

Le schéma d'une scène définit ce qui se produit à quel point dans le calendrier de la scène .Vous devez définir le schéma d'une scène dans ses modules client et serveur, et inclure des crochets de cycle de vie pour gérer quand les configurations survernir.

Crochets de cycle de vie

Le schéma crochets de cycle de vie vous permet de gérer quand les opérations de scène survernir. 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 de :

Tous les trois crochets peuvent également se répéter si la scène est rejouée :

Configurationnes

La configuration du schéma définit les opérations principales d'une scène, par exemple jouer de l'audio à 00:32, de mettre en file d'attente une animation pour s'aligner sur cet audio, programmer un événement de scène comme un afficherde feux d'artifice et plus encore.Chaque configuration prend en charge certaines fonctions d'appel 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 « rechercher » autour des scènes comme vous le pourriez rechercher à travers une vidéo.Dans Mode de remplacement, vous pouvez également passer d'une scène à l'autre pour prévisualiser un événement multi-scène entier avant de le déployer en production.

La recherche de scène n'est pas accessible à tout le monde puisque les utilisateurs simplement profitant de l'événement ne devraient pas avoir la capacité de contrôler son flux de temps.Au lieu de cela, vous devez accorder l'autorisation en fonction de l'événement ainsi que de groupes spécifiques et/ou de rôles à l'intérieur d'entre eux.

  1. Créez une nouvelle 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 tables suivantes dans l'appel setSeekingPermissions comme suit :

    placeIDsListe délimitée par des virgules des valeurs PlaceId pour soutenir la recherche à l'intérieur.
    userIDsListe délimitée par des virgules de UserIds pour ceux qui peuvent rechercher dans les endroits 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 endroits pris en charge.

plugingestionnaire de scène

Le plugin gestionnaire de scène est un outil utile pour charger et décharger des scènes, lumière, et terrain.À moins que vous utilisiez Mode en ligne, il est fortement recommandé d'utiliser ce plugin au lieu de placer/éditer manuellement des objets et des propriétés de scène.

Pour installer le plugin :

  1. Dans le menu Affichage du studio, ouvrez la boîte à outils .

    Toolbox toggle button in Studio
  2. Avec l'onglet boutique des 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 Enter pour localiser le plugin.

  4. Cliquez sur l'icône du plugin pour afficher 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 indiqué 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 ressources d'une scène dans ou hors des dossiers organisés dans l'espace de travail.

actionde pluginAvertissement
Charger le client Si le contenu du client de la scène est déchargé, déplace son dossier environnement / client dans le dossier espace de travail / ScenesClient .
Charger le serveur Si le contenu du serveur de la scène est déchargé, déplace son dossier environnement / serveur dans le dossier espace de travail / ScenesServer .
Décharger le client Si le contenu du client de la scène est chargé, il déplace son dossier Client de Espace de travail / ScenesClient vers le dossier [Scène] / Environnement .
Décharger le serveur Si le contenu du serveur de la scène est chargé, il déplace son dossier serveur de espace de travail / ScenesServer vers le dossier [Scène] / 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 de niveau supérieur Lighting stocke toutes les propriétés d'éclairage et les effets visuels d'un emplacement.Puisque c'est un service de niveau supérieur, vous ne pouvez pas le déplacer manuellement dans le dossier Environnement / Serveur / Environnement / Client d'une scène spécifique.Au lieu de cela, vous pouvez utiliser le plugin pour copier ses propriétés et ses 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 skyboxes via le service 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 élargissez la configuration de l'environnement de cette scène / d'éclairage et vous verrez les mêmes propriétés d'éclairage que les attributs du dossier, ainsi que les enfants clonés du service de niveau supérieur ..

    Instances clonées
    Attributs enregistrés

    Une fois les propriétés d'éclairage et les enfants sauvegardés pour une scène, vous pouvez les charger rapidement dans le service de niveau supérieur Lighting en cliquant sur Charger l'éclairage à partir de la fenêtre du plugin.

Enregistrer et charger le terrain

Puisque Terrain est une classe de niveau supérieur dans Workspace , vous ne pouvez pas déplacer manuellement le terrain généré ou sculpté dans le dossier Environnement / Serveur ou Environnement / Client d'une scène spécifique.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 de niveau supérieur terrain .

  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 sauvegardé.

    Une fois le terrain sauvegardé pour une scène, vous pouvez le charger rapidement de nouveau dans le service de niveau supérieur Terrain en cliquant sur Charger le terrain à partir de la fenêtre du plugin.

Référence de l'API

Crochets de cycle de schéma

Lors de la configuration

L'hook de cycle de vie OnSetup est destiné à initialiser des ressources et des variables qui seront référencées dans OnRun ou OnEndScene , à configurer connections qui sont destinées à durer pendant la scène, etc.Ce crochet reçoit le paramètre timePositionObject qui vous permet de lire le temps actuel lors du démarrage.

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)")
-- Environnements de scène d'accès ; ne s'applique pas au mode en ligne
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- Attendez les ressources
dummy = clientEnvironment:WaitForChild("Dummy")
print("Current time is:", timePositionObject.Value)
end
Schéma du 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 (Server)")
-- environnementde scène d'accès ; 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("Current time is:", timePositionObject.Value)
end

En cours d'exécution

OnRun est le principal hook de cycle opérationnel dans un schéma.Il doit contenir toutes les configurations planifiées pour la scène, depuis le jeu de audio ou une animation jusqu'à planifier un événement comme un spectacle de feux 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 playing")
end,
OnEnd = function(self)
print("Audio ended")
end
})
end

Sur la fin de la scène

L'hook de cycle de vie OnEndScene est utile pour nettoyer tout ce qui reste en suspens dans la scène, comme la rupture des connexions créées dans OnSetup ou OnRun qui restent pendant la durée de la scène.

Schéma du serveur

Schema.OnEndScene = function()
print("OnEndScene (Server)")
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 ait fini de jouer.

Clé de configurationAvertissement
StartTimeQuand jouer l'audio par rapport à la durée de la scène, en secondes.
SoundIdID de ressource de l'audio à jouer.
OnStartFonction personnalisée à déclencher lorsque l'audio commence à jouer.
OnEndFonction personnalisée à déclencher lorsque l'audio finit 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 playing")
end,
OnEnd = function(self)
print("Audio ended")
end
})
end

animer

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

Clé de configurationAvertissement
StartTimeQuand jouer l'animation par rapport à la durée de la scène, en secondes.
EndTimeTemps facultatif pour terminer l'animation par rapport à la durée de la scène, en secondes.
RigLe rig d'animation pour jouer l'animation.
AnimationIdID de ressource de l'animation à jouer.
SpeedVitesse de lecture de l'animations; la valeur par défaut est 1.
FadeInTimeQuantité de temps pour disparaître dans l'animations, en secondes ; la valeur par défaut est de 0,2 (secondes).
FadeOutTimeQuantité de temps pour estomper l'animations, 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 finit de jouer.
LoopedSi l'animationsdoit être bouclée ; la valeur par défaut est false .
SyncToAudioTable définissant si l'animation doit être synchronisée avec une configuration audio 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 facultatif à la fin de l'animation 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 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

tween

Crée un configurable Tween qui est préservé dans la recherche et dans la jointure dynamique, ce qui signifie que vous pouvez chaîner des adolescents à des points distincts dans le temps et tout devrait jouer et se synchroniser comme prévu.

Clé de configurationAvertissement
StartTimesTable des temps de début en relation avec la durée de la scène, en secondes.
TweenTable définissant l'objet et les propriétés à tween. Accepte les clés suivantes :
OnStartFonction personnalisée à déclencher lorsque le préadolescent commence à jouer.
OnHeartbeatFonction personnalisée à tirer à chaque Heartbeat ; reçoit l'alpha adolescent comme deuxième paramètre.
OnEndFonction personnalisée à déclencher lorsque la partie d'adolescent se termine.
SyncToAudioTable définissant si synchroniser le tween vers une configuration audio audio. Accepte les clés suivantes :
  • Audio – Référence à une configuration audio .
  • StartAtAudioTimes – Tableau des temps de début définissant quand jouer l'adolescent 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 playing")
end,
OnHeartbeat = function(self, alpha)
print("Tween alpha", alpha)
end,
OnEnd = function(self)
print("Tween completed")
end,
})
end

intervalle

Exécute une fonction de rappel personnalisée pendant une durée spécifiée sur une fréquence spécifiée, en secondes.Utile pour répéter des événements comme des lumières clignotantes, la pulsation de 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 clampée à Heartbeat .

Clé de configurationAvertissement
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.
FrequencyFréquence à laquelle la fonction OnInterval doit lancer, en secondes, avec la première exécution à StartTime.
OnStartFonction personnalisée à déclencher lorsque la série d'intervalles commence.
OnIntervalFonction personnalisée à tirer à 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 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 facultatif à la fin de 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

horaire

Semblable à intervalle excepté que vous pouvez définir plusieurs temps de départ spécifiques pour le même événement, comme le calendrier d'un spectacle de feux d'artifice deux fois dans une scène.

Clé de configurationAvertissement
StartTimesTable des temps de début en relation avec la durée de la scène, en secondes.
OnStartFonction personnalisée pour tirer à chaque fois spécifiée dans la table StartTimes.
SkippableBoolean définissant si l'événement prévu peut être ignoré pour les utilisateurs qui rejoignent tard ou pour lorsqu'il est recherché avant un temps de début prévu.Si la valeur est définie sur false, tous les temps d'événement prévus avant le temps de jointure/recherche se produiront au moment de la jointure/recherche.Si la valeur est définie sur true, seules les heures de début prévues après rejoindre/chercher se survernir.La valeur par défaut est false .
SyncToAudioTable définissant si synchroniser le calendrier à une configuration audio audio. Accepte les clés suivantes :
  • Audio – Référence à une configuration audio .
  • StartAtAudioTimes – Tableau des temps de démarrage définissant quand activer la fonction OnStart en relation avec 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 de battement cardiaque temporaire
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- Informer le cadre de la connexion
Schema:inform(tempConnection)
end
})
end

informer

Informe le framework de tout module, d'objets d'interface, de connexions, etc.qui sont créées dans le hook de cycle de vie OnRun , garantissant qu'elles sont correctement nettoyées lorsqu'elles sont recherchées .Les cas d'utilisation incluent :

  • Informer le cadre d'une connexion temporaire ad hoc comme RunService.Heartbeat afin que la connexion soit nettoyée lors de la recherche d'un point précédent de la durée de la scène.

    Schéma du serveur

    Schema.OnRun = function()
    print("OnRun (Server)")
    Schema:schedule({
    StartTimes = {5},
    OnStart = function(self)
    -- Initialiser la connexion de battement cardiaque temporaire
    local tempConnection = RunService.Heartbeat:Connect(function()
    end)
    -- Informer le cadre de la connexion
    Schema:inform(tempConnection)
    end
    })
    end
  • Appeler une fonction de nettoyerpersonnalisée dans un ModuleScript qui initialise une connexion ou une autre référence pendant le hook de cycle de vie OnRun.

    Schéma du 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 (Server)")
    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 nettoyerde la scène
    Schema:inform(customModule, customModule.clean)
    end,
    })
    end
    ModuleScript - Module personnalisé

    local RunService = game:GetService("RunService")
    local CustomModule = {}
    CustomModule.init = function()
    -- Initialiser la connexion de battement de cœur
    CustomModule.connection = RunService.Heartbeat:Connect(function()
    end)
    end
    CustomModule.clean = function()
    -- Déconnecter et effacer la connexion au rythme cardiaque
    if CustomModule.connection then
    CustomModule.connection:Disconnect()
    CustomModule.connection = nil
    end
    end
    return CustomModule

Fonctions

charger la scène

loadScene(nom de scène : string , temps de démarrage : number ?)

Chargement programmatique d'une scène par sceneName et démarrage à partir de startTime depuis le début.Il y aura une période de grâce de 5 secondes pour que la scène se charge du serveur avant que la recherche ne commence et que la scène commence à jouer.Cela signifie que si vous appelez loadScene("[SceneName]", 20) à exactement 4:15:00 PM, le framework attendra 5 secondes en plus des 20 demandés, lançant la scène à 4:15:25 PM.

Scénario

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Déterminez la scène suivante à charger lorsque la scène actuelle se termine
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- « Prémontrer » terminé ; chargez la première scène du concert
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- « Track1 » est terminé ; chargez la deuxième scène dans le concert
EventSequencer.loadScene("Track2")
else
-- Retour en boucle sur la scène avant le spectacle
EventSequencer.loadScene("PreShow")
end
end)

créer Schema

createSchema(): table

Retourne une instance du schéma de la scène pour créer une logique pour 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

rechercher

seek(temps : number )

Recherche la valeur time en secondes à partir du début de la scène actuellement chargée.

Scénario

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

définir le temps d'avertissement de scène

setSceneWarningTime(endSceneTimeWindow: number )

Définit la quantité de temps à partir de la fin de toutes les scènes à laquelle une avertissement est envoyé.Vous pouvez détecter l'avertissement soit du côté du client via onSceneEndingWarningForClient ou du côté du serveur via onSceneEndingWarningForServer .

Scénario

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("Scene is about to end!")
end)

définirSeekingPermissions

setSeekingPermissions(permissions : table )

Accorde des permissions en fonction de l'événement et des groupes et rôles spécifiques et/ou dans lesquels ils se trouvent.Voir rechercher et changer de scènes pour plus d'informations.

getCurrentSceneEnvironnement

getCurrentSceneEnvironment(): Folder (YIELDS)

Retourne le dossier environnement du côté client ou du côté serveur de la scène actuelle, en fonction de savoir s'il est appelé à partir du script de schéma client ou du script de schéma serveur respectivement.

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)")
-- Environnements de scène d'accès ; ne s'applique pas au mode en ligne
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end
Schéma du 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 (Server)")
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
end

obtenir l'environnement du serveur actuel depuis le client

getCurrentServerEnvironmentFromClient(): Folder (YIELDS)

Renvoie le dossier serveur environnement de la scène actuelle.Contrairement à getCurrentSceneEnvironment, vous pouvez l'appeler depuis le script du 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)")
-- Environnements de scène d'accès ; ne s'applique pas au mode en ligne
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end

charge la scène

est en cours de chargement de la scène : boolean

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

Scénario

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

Événements

avertissement de fin de scène pour client

Feux 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é qu'en LocalScript .

Lecteur 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 (du côté du client)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("Scene is about to end!")
end)

onSceneEndingWarningForServer pour le serveur

Feux 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é qu'en Script .

Scénario

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("Scene is about to end!")
end)

sur sceneLoadedForClient

Feux sur le client lorsque la scène démarre. Cet événement ne peut être connecté qu'en LocalScript.

Lecteur localScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Détecter quand la scène commence (du côté du client)
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("Scene is starting!")
end)

sur l'orchestration terminée

Feux sur le serveur lorsqu'une scène a atteint sa durée temps et qu'elle s'est effectivement terminée.Cet événement reçoit un argument de nom de chaîne endedSceneName pour la scène qui vient de se terminer et vous pouvez relier cet événement à conditionnellement charger une autre scène .Ne peut être connecté qu'en Script .

Scénario

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Déterminez la scène suivante à charger lorsque la scène actuelle se termine
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- « Prémontrer » terminé ; chargez la première scène du concert
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- « Track1 » est terminé ; chargez la deuxième scène dans le concert
EventSequencer.loadScene("Track2")
else
-- Retour en boucle sur la scène avant le spectacle
EventSequencer.loadScene("PreShow")
end
end)