EventSequencer to potężne narzędzie, które umożliwia budowanie żywych, międzyserwerowych wydarzeń i scen na strukturalnej kolejności działań i uruchomień.Bardziej szczegółowo, ten moduł pomaga ci:
- Zbuduj wydarzenie lub scenę na strukturalnym ramie poprzez zaplanowane konfiguracje dźwięk, animacji i nastolatków.
- Przełączanie między wieloma scenami na wielu serwerach, synchronizowanie skomplikowanych animacji i wizualizacji do harmonogramu.
- Przeszukaj wydarzenie i zapoznaj się z doświadczeniem do celów testowania i rozwoju.
Ten framework został przetestowany w bojowych wydarzeniach w Roblox, takich jak Twenty One Pilots i 24kGoldn koncerty, a także wiele wysoko odwiedzanych doświadczeń.
Aby zobaczyć Sekwencję zdarzeń w akcji w edytowalnym miejsce, sprawdź szablon Koncert w Roblox Studio.Ten szablon jest kompleksowym punktem wyjścia dla programistów do tworzenia wydarzeń/koncertów i zapoznania się z różnymi funkcjami i komponentami zaangażowanymi.

Użycie modułu
Instalacja
Aby użyć ramy EventSequencer w doświadczeniu:
Upewnij się, że wybrano sortowanie modele , a następnie kliknij przycisk Zobacz wszystko dla kategorii .
Zlokalizuj i kliknij pasek modułów rozwojowych .
Zlokalizuj moduł Sekwencji zdarzeń i kliknij go, lub przeciągnij i upuść do widoku 3D.
W oknie Eksploratora przenieś cały model sekwencji zdarzeń do ServerScriptService .Po uruchomieniu doświadczenia moduł rozproszy się na różne usługi i rozpocznie działanie.
Tryby ramowe
Zastąp tryb
Domyślny tryb ramowy to tryb zastępowania w którym projektujesz unikalne sceny poprzez umieszczenie obiektów 3D, terenu, właściwości oświetlenia, efektów środowiskowych i obiektów interfejsu użytkownika w tej scenie środowisku .Gdy scenka się załaduje, te obiekty i właściwości zostaną rozdzielone na , i , zastępując istniejące obiekty/właściwości, aby utworzyć sklonowaną przestrzeń.
Tryb inline
Innym trybem ramowym jest tryb wiersza w którym podobnie projektujesz unikalne sceny z logiką skryptową dla ich przepływu/wydarzeń, ale ramka nie zniszczy nie istniejących obiektów 3D , terenu , właściwości oświetlenia , efektów środowiskowych i obiektów interfejsu użytkownika w celu sklonowania zasobów/właściwości z katalogu środowiska sceny po załadowaniu.
Aby włączyć tryb inline:
W modelu EventSequencer , który umieściłeś w ServerScriptService , przeszukaj w dół i wybierz wartość Inline wewnątrz katalogu ReplicatedStorage .
W oknie Właściwości, przełącz suwak Wartość .
Twórz sceny
Scena jest zasadniczo częścią ogólnego wydarzenia lub sceny pokrytej serią folderów.Każda scena zawiera logikę skryptową, która określa jej przepływ/wydarzenia, a scena może przechowywać własne obiekty 3D, teren, właściwości oświetlenia, efekty środowiskowe i obiekty interfejsu użytkownika.
Aby szybko rozpocząć, możesz znaleźć pustą scenę w głównym folderze modułu:
Rozszerz katalog EventSequencer i znajdź katalog BlankScene .
Przenieś lub skopiuj cały katalog Pustej sceny do Przesuniętego przechowywania .
Długość czasu
Każda scena powinna mieć czas trwania , w sekundach, definiujący jej długość - tak jak film lub koncert ma ustalony czas trwania.Długość czasu jest określona jako liczbowy atrybut na folderze sceny o nazwie Długość czasu , który możesz ustawić bezpośrednio w Studio lub programowo za pośrednictwem >.


Środowisko
Katalog środowiska sceny zawiera wszystko, co widzą i słyszą użytkownicy, w tym obiekty 3D , teren , właściwości oświetlenia i efekty środowiskowe , a także obiekty interfejsu użytkownika.Kiedy ładowana jest scena, te obiekty i właściwości są rozdzielane na Workspace , Terrain i Lighting , zastępując istniejące obiekty/właściwości, aby utworzyć sklonowaną przestrzeń.
Katalog Środowisko zawiera następujące pojemniki:
Kontener | Opis |
---|---|
Klienci | Zawiera wszystkie zasoby do załadowania, gdy którykolwiek użytkownik (klient) dołącza do wydarzenia, takie jak obiekty interfejsu użytkownika lub ryg animacji. |
Gracze pochodzą | Zawiera części, w których użytkownicy pojawiają się po dołączeniu. Każda część w tym folderze zachowuje się podobnie do SpawnLocation . |
Serwer | Zawiera wszystkie zasoby do załadowania, gdy scena po raz pierwszy zostanie utworzona na serwerze. Zaleca się, aby większość zasobów wizualnych trafiła tutaj. |
Teren | Zawiera teren sceny. |
Oświetlenie | Zawiera globalne właściwości oświetlenia jako atrybuty, a także modyfikatory takie jak efekty atmosferyczne i efekty post-przetwarzania . |
Wydarzenia
Katalog wydarzeń sceny jest wyłącznie miejscem na , które komunikują się między modułami klienta i serwera .Nie jest wymaganiem umieszczenia czegokolwiek w tym folderze.
Klienci
Ten skrypt wykonuje logikę schematu na klientzie.
Serwer
Ten skrypt wykonuje logikę schematu na serwerze.
Schematy scen
Schemat sceny definiuje to, co dzieje się w jakimś momencie w czasie trwania sceny .Powinieneś zdefiniować schemat sceny w modułach klienta i serwera, a także dodać haki cyklu życia , aby zarządzać, kiedy występować konfiguracje .
Haki cyklu życia
Schema haki cyklu życia pozwala zarządzać, kiedy występowaćoperacje sceny. Scena w produkcji będzie zazwyczaj uruchamiana w najprostszej przepływności:
Na bieżąco może zostać przerwane podczas poszukiwania:
- Podczas konfiguracji → Podczas uruchamiania … szukaj → Podczas uruchamiania … szukaj → Podczas uruchamiania sceny → Pod koniec sceny
Wszystkie trzy haki mogą się powtórzyć, jeśli scena zostanie ponownie odtworzona:
- Podczas konfiguracji → Podczas uruchamiania → Pod koniec sceny … odtwarzanie → Podczas konfiguracji → Podczas uruchamiania → Pod koniec sceny
Konfiguracje
Schema konfiguracje określają główne operacje sceny, na przykład odtwarzanie dźwięku o 00:32, zaplanowanie animacji do zsynchronizowania z tym dźwiękiem, zaplanowanie wydarzenia sceny jak pokazywać, prezentowaćfajerwerków i więcej.Każda konfiguracja wspiera pewne funkcje powrotne, w których pierwszy parametr ( self ) jest instancją instancja.
Szukaj scen
Unikalną funkcją EventSequencer jest możliwość "szukania" wokół scen, tak jak możesz szukać za pomocą wideo.W trybie zamiany, możesz również przełączać między scenami, aby zapoznać się z całym wieloetapowym wydarzeniem przed jego wdrożeniem do produkcji.
Szukanie scen nie jest dostępne dla wszystkich , ponieważ użytkownicy po prostu cieszący się wydarzeniem nie powinni mieć możliwości kontroli jego przepływu czasu.Zamiast tego musisz przyznać uprawnienie w oparciu o wydarzenie PlaceId oraz konkretne UserIds i/lub grupy oraz role w nich.
Utwórz nowy Script w ciągu ServerScriptService .
Wklej następujący kod do nowego skryptu.
Skrypt - Ustaw poszukiwanie uprawnieńlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.setSeekingPermissions({placeIDs = {},userIDs = {},groups = {{GroupID = , MinimumRankID = },}})Wypełnij następujące tabele w ramach wezwania setSeekingPermissions w następujący sposób:
placeIDs Lista oddzielona przecinkami z PlaceId wartościami do wsparcia poszukiwań wewnątrz. userIDs Lista oddzielona przecinkami dla tych, którzy mogą szukać w wspieranych miejscach UserIds. groups Lista oddzielona przecinkami zawierająca każdą tabelę, która zawiera ID grupy i minimalną rangę członków tej grupa, którzy mogą szukać w wspieranych miejscach.
dodatek plug-inmenedżera scen
Wtyczka Menadżer scen jest przydatnym narzędziem do ładowania i rozładowywania scen, świetlenia i terenu.Chyba że używasz trybu inline, jest bardzo zalecane, abyś użył tego pluginu zamiast ręcznie umieszczać/edytować obiekty sceny i ich właściwości.
Aby zainstalować dodatek plug-in:
Z menu Widok w Studio otwórz Pudełko z narzędziami .
Po wybraniu zakładki Sklep twórców , wybierz Wtyczki z menu rozwijanego.
W polu wyszukiwania wpisz Menadżer sceny i naciśnij Enter, aby znaleźć dodatek plug-in.
Kliknij ikonę wtyczki, aby zobaczyć jej szczegóły, a następnie kliknij przycisk Zainstaluj .
Po zainstalowaniu wtyczki pojawia się ona w zakładce Wtyczki w Studio.
Załaduj i rozładuj sceny
Jak opisano w tworzeniu scen, folder Środowisko sceny zawiera wszystko, co widzą i słyszą użytkownicy, w tym obiekty 3D.Wtyczka pomaga szybko załadować zasoby sceny do lub z organizowanych folderów w przestrzeni roboczej.
akcjipluginu | Opis |
---|---|
Załaduj klient | Jeśli zawartość klienta sceny nie zostanie rozładowana, przenosi jej środowisko / klienta folder do katalogu Przestrzeń robocza / ScenyClient . |
Załaduj serwer | Jeśli treść serwera sceny nie zostanie rozładowana, przenosi jej Środowisko / Serwer folder do folderu Przestrzeń robocza / Serwer scen . |
Rozładuj klient | Jeśli zawartość klienta sceny zostanie załadowana, przenosi jej katalog Klient z Przestrzeni roboczej / ScenyClient z powrotem do katalogu [Scena] / Środowiska . |
Rozładuj serwer | Jeśli treść serwera sceny zostanie załadowana, przenosi jej katalog Serwer z Przestrzeni roboczej / Serwer sceny z powrotem do katalogu [Scena] / Środowisko . |
Rozładuj wszystkie sceny | Przesuwa katalog klienta i serwera każdej załadowanej sceny z powrotem do jej katalogu środowiska . |
Zapisz i załaduj oświetlenie
Główna usługa Lighting przechowuje wszystkie właściwości oświetlenia i efekty wizualne miejsce.Ponieważ jest to usługa najwyższego poziomu, nie możesz ręcznie przenieść jej do folderu Środowisko / Serwer / Środowisko / Klient w szczególnej scenie.Zamiast tego możesz wykorzystać plugin, aby skopiować jego właściwości i dzieci do folderu Środowisko / Oświetlenie sceny.
Konfiguruj właściwości oświetlenia sceny oraz efekty post-przetwarzania , efekty atmosferyczne oraz efekty skyboxów za pośrednictwem najwyższego poziomu usługi .
W oknie wtyczki Menadżera sceny , kliknij Zapisz oświetlenie dla pożądanej sceny.
Wybierz i rozszerz konfigurację środowiska środowiska / oświetlenia tej sceny i zobaczesz te same właściwości oświetlenia jak atrybuty z folderu, a także klonowane dzieci najwyższego poziomu usługi.
Sklonowane instancje Zapisane atrybuty Po zapisaniu właściwości oświetlenia i dzieci dla sceny możesz szybko ponownie załadować je do najwyższego poziomu Lighting usługi, klikając Załaduj oświetlenie z okna wtyczki.
Zapisz i załaduj teren
Ponieważ Terrain jest klasą najwyższego poziomu w ramach Workspace , nie możesz ręcznie przenosić wygenerowanych lub rzeźbionych terenów do folderu Środowisko / Serwer / Środowisko / Klient w szczególnej scenie.Zamiast tego możesz wykorzystać plugin, aby skopiować go do folderu Środowisko sceny / Teren .
Konfiguruj teren sceny za pośrednictwem usługi najwyższego poziomu Teren .
W oknie wtyczki Menadżera sceny , kliknij Zapisz teren dla pożądanej sceny.
Wybierz i rozszerz katalog Środowisko / Teren tej sceny i zobaczisz obiekt TerenRegion , który reprezentuje zapisany teren.
Po zapisaniu terenu dla sceny możesz szybko ponownie załadować go do najwyższego poziomu Terrain usługi, klikając Załaduj teren z okna wtyczki.
Referencja API
Haki cyklu życia schematu
Podczas konfiguracji
Hak cyklu życia OnSetup jest przeznaczony do inicjalizacji zasobów i zmiennych, które zostaną odwołane w OnRun lub OnEndScene, ustawienia connections, które mają trwać przez czas trwania sceny itp.Ten hak otrzymuje parametr timePositionObject, który pozwala na odczytanie obecnego czasu podczas konfiguracji.
Schema klienta
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)")
-- Dostęp do środowisk scenicznych; nie dotyczy trybu inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- Poczekaj na zasoby
dummy = clientEnvironment:WaitForChild("Dummy")
print("Current time is:", timePositionObject.Value)
end
Schema serwera
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)")
-- środowiskosceny dostępu; nie dotyczy trybu inline
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("Current time is:", timePositionObject.Value)
end
Na biegu
Na biegu wykonawczym jest głównym hookiem cyklu życia operacyjnego w ramach schematu.Powinien zawierać wszystkie skonfigurowane godzinowo konfiguracje dla sceny, od odtwarzania muzyki lub animacji do planowania wydarzenia takiego jak pokaz fajerwerków.
Schema klienta
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
Na końcu sceny
Hak cyklu życia OnEndScene jest przydatny do oczyszczenia wszystkiego, co wyróżnia się na scenie, takiego jak odłączenie połączeń utworzonych w OnSetup lub OnRun, które pozostają przez czas trwania sceny.
Schema serwera
Schema.OnEndScene = function()
print("OnEndScene (Server)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
end
Konfiguracje schematu
dźwięk
Tworzy obiekt Sound w przestrzeni roboczej, który odtwarza się w określonym czasie.Dźwięk jest następnie usuwany po zakończeniu sceny lub po zakończeniu odtwarzania obiektu Sound.
Klucz konfiguracyjny | Opis |
---|---|
StartTime | Kiedy odtworzyć dźwięk w odniesieniu do czasu trwania sceny, w sekundach. |
SoundId | ID zasobu audio do grać. |
OnStart | Niestandardowa funkcja do uruchamiania, gdy rozpocznie się odtwarzanie audio. |
OnEnd | Niestandardowa funkcja do uruchamiania, gdy audio zakończy odtwarzanie. |
Volume | Objętość obiektu Sound ; domyślna wartość to 0,5. |
Schema klienta
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
animować
Tworzy Animation, który odtwarza się w określonym czasie.
Klucz konfiguracyjny | Opis |
---|---|
StartTime | Kiedy odtworzyć animację w odniesieniu do czasu trwania sceny, w sekundach. |
EndTime | Opcjonalny czas, kiedy należy zakończyć animację w odniesieniu do czasu trwania sceny, w sekundach. |
Rig | Rama animacji do odtwarzania animacji. |
AnimationId | ID zasobu animacji do grać. |
Speed | Prędkość odtwarzania animacja; domyślna jest 1. |
FadeInTime | Ilość czasu na zaniknięcie w animacja, w sekundach; domyślnie jest to 0,2 (sekund). |
FadeOutTime | Ilość czasu na rozpłynięcie animacja, w sekundach; domyślnie jest to 0,2 (sekundy). |
OnStart | Niestandardowa funkcja do uruchamiania, gdy animacja zaczyna się odtwarzać. |
OnEnd | Niestandardowa funkcja do uruchamiania, gdy animacja zakończy odtwarzanie. |
Looped | Czy ma się powtórzyć animacja; domyślnie jest false . |
SyncToAudio | Tabela określająca, czy należy zsynchronizować animację z konfiguracją audio. Akceptuje następujące klucze:
|
Schema klienta
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
pomiędzy
Tworzy konfigurowalny Tween, który jest przechowywany w poszukiwaniu i w dynamicznym połączeniu, co oznacza, że możesz łączyć nastolatków w różnych punktach w czasie i wszystko powinno odtwarzać się i synchronizować zgodnie z oczekiwaniami.
Klucz konfiguracyjny | Opis |
---|---|
StartTimes | Tabela czasów rozpoczęcia w stosunku do czasu trwania sceny, w sekundach. |
Tween | Tabela określająca obiekt i właściwości do przejścia. Akceptuje następujące klucze:
|
OnStart | Niestandardowa funkcja do uruchamiania, gdy nastolatek zaczyna grać. |
OnHeartbeat | Niestandardowa funkcja, która strzela na każdym Heartbeat ; otrzymuje alfę tweena jako swój drugi parametr. |
OnEnd | Niestandardowa funkcja do strzelania, gdy skrzydło nastolatka kończy odtwarzanie. |
SyncToAudio | Tabela określająca, czy należy zsynchronizować tween z konfiguracją audio. Akceptuje następujące klucze:
|
Schema klienta
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
interwał
Wykonuje niestandardową funkcję powrotną w określonym czasie na określonej częstotliwości, w sekundach.Przydatne do powtarzania wydarzeń, takich jak migające światła, pulsowanie intensywności dźwięku itp.Najniższa możliwa częstotliwość wynosi 0 sekund, ale technicznie minimalna częstotliwość zawsze jest ograniczona do Heartbeat.
Klucz konfiguracyjny | Opis |
---|---|
StartTime | Początek czasu trwania interwału w stosunku do czasu trwania sceny, w sekundach. |
EndTime | Koniec czasu trwania interwału w stosunku do czasu trwania sceny, w sekundach. |
Frequency | Jak często funkcja OnInterval powinna wystrzelić, w sekundach, z pierwszym wykonaniem na StartTime. |
OnStart | Niestandardowa funkcja do uruchamiania, gdy rozpoczyna się seria interwałów. |
OnInterval | Niestandardowa funkcja, która strzela co określoną częstotliwością w określonym czasie (StartTime do EndTime). |
OnEnd | Niestandardowa funkcja do uruchamiania, gdy kończy się seria interwałów. |
SyncToAudio | Tabela określająca, czy należy zsynchronizować czas trwania interwału z konfiguracją dźwięku. Akceptuje następujące klucze:
|
Schema klienta
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
planuj
Podobnie do interwału, z wyjątkiem że możesz określić wiele konkretnych początkowych czasów dla tego samego wydarzenia, takich jak zaplanowanie pokazu fajerwerków dwa razy w scenie.
Klucz konfiguracyjny | Opis |
---|---|
StartTimes | Tabela czasów rozpoczęcia w stosunku do czasu trwania sceny, w sekundach. |
OnStart | Niestandardowa funkcja, która strzela o każdej określonej porze w tabeli StartTimes. |
Skippable | Boolean określający, czy zaplanowane wydarzenie może zostać pominięte dla użytkowników, którzy dołączają późno, lub dla czasu poszukiwania przed planowanym rozpoczęciem.Jeśli ustawiono na false, wszystkie godziny rozpoczęcia wydarzeń zaplanowane przed czasem dołączenia/szukania występowaćw tym czasie dołączenia/szukania.Jeśli ustawiono na true , wystąpi tylko czas rozpoczęcia zaplanowany po dołączeniu/szukaniu.Domyślny jest false . |
SyncToAudio | Tabela określająca, czy należy zsynchronizować harmonogram z konfiguracją audio. Akceptuje następujące klucze:
|
Schema klienta
Schema.OnRun = function()
print("OnRun (Client)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- Uruchom tymczasowe połączenie z biciem serca
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- Informuj framework o połączeniu
Schema:inform(tempConnection)
end
})
end
informować
Informuje framework o dowolnych modułach, obiektach interfejsu, połączeniach itp.które są tworzone w haku cyklu życia OnRun, zapewniając, że są prawidłowo oczyszczone, gdy szukają >.Przypadki użycia obejmują:
Informowanie o ramach tymczasowego połączenia ad-hoc, takiego jak RunService.Heartbeat, aby połączenie zostało wyczyszczone, gdy poszukuje się wcześniejszego punktu w czasie trwania sceny.
Schema serweraSchema.OnRun = function()print("OnRun (Server)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Uruchom tymczasowe połączenie z biciem sercalocal tempConnection = RunService.Heartbeat:Connect(function()end)-- Informuj framework o połączeniuSchema:inform(tempConnection)end})endWywołanie niestandardowej funkcji "czyszczenia" w ModuleScript, która inicjalizuje połączenie lub inny odniesienie podczas życia cyklu OnRun.
Schema serweralocal 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)-- Wezwij funkcję "init" w niestandardowym modulecustomModule.init()-- Wezwij funkcję "czystą" w niestandardowym module podczas sprzątania scenySchema:inform(customModule, customModule.clean)end,})endModuleScript - Personalizowany modułlocal RunService = game:GetService("RunService")local CustomModule = {}CustomModule.init = function()-- Uruchom połączenie bicia sercaCustomModule.connection = RunService.Heartbeat:Connect(function()end)endCustomModule.clean = function()-- Rozłącz i wyczyść połączenie bicia sercaif CustomModule.connection thenCustomModule.connection:Disconnect()CustomModule.connection = nilendendreturn CustomModule
Funkcje
Załaduj scenę
loadScene(sceneName: string , startTime: number ?)
Ładowanie programatyczne sceny przez sceneName i rozpoczęcie jej od startTime od początku.Będzie 5-sekundowy "okres łaski" dla sceny, aby załadować z serwera, zanim nastąpi wyszukiwanie i rozpocznie się gra sceny.Oznacza to, że jeśli wezwiesz loadScene("[SceneName]", 20) o dokładnie 4:15:00 PM, framework poczeka 5 sekund w dodatku do żądanych 20, rozpoczynając scenę o 4:15:25 PM.
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Wyznacz następną scenę do załadowania, gdy obecna scena się zakończy
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- „PreShow” zakończone; załaduj pierwszą scenę w koncercie
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- „Track1” zakończony; załaduj drugą scenę w koncercie
EventSequencer.loadScene("Track2")
else
-- Powrót do sceny przed pokazem
EventSequencer.loadScene("PreShow")
end
end)
stwórz Schema
createSchema(): table
Zwraca instancję schematu sceny do tworzenia logiki dla sceny.
Schema klienta
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
end
szukaj
szukaj(czas: number )
Szukuje wartości time w ciągu sekund od początku obecnie załadowanej sceny.
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.seek(95.58)
ustaw czas ostrzeżenia sceny
setSceneWarningTime(endSceneTimeWindow: number )
Ustawia ilość czasu z końca wszystkich scen, w których wysyłany jest ostrzeżenie .Możesz wykryć ostrzeżenie zarówno po stronie klienta za pomocą naSceneEndingWarningForClient lub po stronie serwera za pomocą naSceneEndingWarningForServer.
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Załaduj scenę
EventSequencer.loadScene("BeautifulScene")
-- Ustaw ostrzeżenie czasowe na 5 sekund przed zakończeniem sceny
EventSequencer.setSceneWarningTime(5)
-- Wykryj, kiedy scena ma się skończyć
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)
ustawSeekingPermisy
setSeekingPermissions(pozwolenia: table )
Udziela uprawnień w oparciu o wydarzenie PlaceId oraz konkretne UserIds i/lub grupy oraz role w nich.Zobacz poszukaj i przełącz sceny po więcej informacji.
dostań obecne środowisko sceny
getCurrentSceneEnvironment(): Folder (ODBIÓR)
Zwraca katalog środowiska strony klienta lub serwera obecnej sceny, w zależności od tego, czy jest ono wzywane z ramienia skryptu schematu klienta lub skryptu schematu serwera odpowiednio.
Schema klienta
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)")
-- Dostęp do środowisk scenicznych; nie dotyczy trybu inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end
Schema serwera
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
Zdobądź obecny środowiskowy serwer od klienta
getCurrentServerEnvironmentFromClient(): Folder (ODBIÓR)
Zwraca folder serwerowej sceny środowiska obecnej sceny.W przeciwieństwie do getCurrentSceneEnvironment, możesz wezwać to ze skryptu schematu klienta.
Schema klienta
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)")
-- Dostęp do środowisk scenicznych; nie dotyczy trybu inline
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end
ładowanie sceny
ładowanie sceny(): boolean
Wzywany z serwera, aby sprawdzić, czy scena jest obecnie wczytywana.
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))print(EventSequencer.isLoadingScene())while EventSequencer.isLoadingScene() dotask.wait()endprint("Scene loaded")
Wydarzenia
na scenie końcowej ostrzeżenie dla klienta
Ogień na klientzie przed sceną ma się skończyć.Domyślny czas wynosi 3 sekundy, ale możesz go skonfigurować za pomocą setSceneWarningTime.To wydarzenie może być połączone tylko w LocalScript .
Lokalny skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Wykryj, kiedy scena ma się skończyć (strona klienta)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("Scene is about to end!")
end)
onSceneEndingWarningForServer Włącz
Ogień na serwerze przed sceną ma się skończyć.Domyślny czas wynosi 3 sekundy, ale możesz go skonfigurować za pomocą setSceneWarningTime.To wydarzenie może być połączone tylko w Script .
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Wykryj, kiedy scena ma się skończyć (strona serwera)
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)
na scenie załadowane dla klienta
Ogień na klientzie, gdy scena się rozpoczyna. To wydarzenie może być połączone tylko w LocalScript.
Lokalny skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Wykryj, kiedy rozpoczyna się scena (strona klienta)
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("Scene is starting!")
end)
naOrkiestracjiZakończone
Ogień na serwerze, gdy scena osiągnie swój czas trwania i skończy się skutecznie.To wydarzenie otrzymuje argument nazwy ciągu endedSceneName dla sceny, która właśnie się zakończyła, i możesz łączyć to wydarzenie warunkowo z ładowaniem innej sceny.Można połączyć tylko w Script .
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Wyznacz następną scenę do załadowania, gdy obecna scena się zakończy
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- „PreShow” zakończone; załaduj pierwszą scenę w koncercie
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- „Track1” zakończony; załaduj drugą scenę w koncercie
EventSequencer.loadScene("Track2")
else
-- Powrót do sceny przed pokazem
EventSequencer.loadScene("PreShow")
end
end)