Sekwencer zdarzeń

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

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:

  1. Od widoku, otwórz pasek narzędzi i wybierz zakładkę Sklep z twórcami .

    Toolbox toggle button in Studio
  2. Upewnij się, że wybrano sortowanie modele , a następnie kliknij przycisk Zobacz wszystko dla kategorii .

  3. Zlokalizuj i kliknij pasek modułów rozwojowych .

  4. Zlokalizuj moduł Sekwencji zdarzeń i kliknij go, lub przeciągnij i upuść do widoku 3D.

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

  1. W modelu EventSequencer , który umieściłeś w ServerScriptService , przeszukaj w dół i wybierz wartość Inline wewnątrz katalogu ReplicatedStorage .

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

  1. Rozszerz katalog EventSequencer i znajdź katalog BlankScene .

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

KontenerOpis
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:

Wszystkie trzy haki mogą się powtórzyć, jeśli scena zostanie ponownie odtworzona:

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.

  1. Utwórz nowy Script w ciągu ServerScriptService .

  2. 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 = },
    }
    })
  3. Wypełnij następujące tabele w ramach wezwania setSeekingPermissions w następujący sposób:

    placeIDsLista oddzielona przecinkami z PlaceId wartościami do wsparcia poszukiwań wewnątrz.
    userIDsLista oddzielona przecinkami dla tych, którzy mogą szukać w wspieranych miejscach UserIds.
    groupsLista 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:

  1. Z menu Widok w Studio otwórz Pudełko z narzędziami .

    Toolbox toggle button in Studio
  2. Po wybraniu zakładki Sklep twórców , wybierz Wtyczki z menu rozwijanego.

  3. W polu wyszukiwania wpisz Menadżer sceny i naciśnij Enter, aby znaleźć dodatek plug-in.

  4. Kliknij ikonę wtyczki, aby zobaczyć jej szczegóły, a następnie kliknij przycisk Zainstaluj .

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

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

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

  2. W oknie wtyczki Menadżera sceny , kliknij Zapisz oświetlenie dla pożądanej sceny.

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

  1. Konfiguruj teren sceny za pośrednictwem usługi najwyższego poziomu Teren .

  2. W oknie wtyczki Menadżera sceny , kliknij Zapisz teren dla pożądanej sceny.

  3. 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 konfiguracyjnyOpis
StartTimeKiedy odtworzyć dźwięk w odniesieniu do czasu trwania sceny, w sekundach.
SoundIdID zasobu audio do grać.
OnStartNiestandardowa funkcja do uruchamiania, gdy rozpocznie się odtwarzanie audio.
OnEndNiestandardowa funkcja do uruchamiania, gdy audio zakończy odtwarzanie.
VolumeObję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 konfiguracyjnyOpis
StartTimeKiedy odtworzyć animację w odniesieniu do czasu trwania sceny, w sekundach.
EndTimeOpcjonalny czas, kiedy należy zakończyć animację w odniesieniu do czasu trwania sceny, w sekundach.
RigRama animacji do odtwarzania animacji.
AnimationIdID zasobu animacji do grać.
SpeedPrędkość odtwarzania animacja; domyślna jest 1.
FadeInTimeIlość czasu na zaniknięcie w animacja, w sekundach; domyślnie jest to 0,2 (sekund).
FadeOutTimeIlość czasu na rozpłynięcie animacja, w sekundach; domyślnie jest to 0,2 (sekundy).
OnStartNiestandardowa funkcja do uruchamiania, gdy animacja zaczyna się odtwarzać.
OnEndNiestandardowa funkcja do uruchamiania, gdy animacja zakończy odtwarzanie.
LoopedCzy ma się powtórzyć animacja; domyślnie jest false .
SyncToAudioTabela określająca, czy należy zsynchronizować animację z konfiguracją audio. Akceptuje następujące klucze:
  • Audio – Odniesienie do konfiguracji audio.
  • StartAtAudioTime – Kiedy odtworzyć animację w odniesieniu do czasu trwania dźwięk.
  • EndAtAudioTime – Opcjonalny czas, w którym można zakończyć animację w odniesieniu do czasu trwania dźwięk.
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 konfiguracyjnyOpis
StartTimesTabela czasów rozpoczęcia w stosunku do czasu trwania sceny, w sekundach.
TweenTabela określająca obiekt i właściwości do przejścia. Akceptuje następujące klucze:
  • Object – Obiekt do przekształcania.
  • InfoTweenInfo instancja dla nastolatka, definiująca jego czas trwania, Enum.EasingStyle , Enum.EasingDirection itp.
  • Properties – właściwości obiektu i powiązane wartości docelowe dla nastolatka
OnStartNiestandardowa funkcja do uruchamiania, gdy nastolatek zaczyna grać.
OnHeartbeatNiestandardowa funkcja, która strzela na każdym Heartbeat ; otrzymuje alfę tweena jako swój drugi parametr.
OnEndNiestandardowa funkcja do strzelania, gdy skrzydło nastolatka kończy odtwarzanie.
SyncToAudioTabela określająca, czy należy zsynchronizować tween z konfiguracją audio. Akceptuje następujące klucze:
  • Audio – Odniesienie do konfiguracji audio.
  • StartAtAudioTimes – Tabela czasów rozpoczęcia określająca, kiedy należy odtworzyć tween w odniesieniu do czasu trwania dźwięk.
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 konfiguracyjnyOpis
StartTimePoczątek czasu trwania interwału w stosunku do czasu trwania sceny, w sekundach.
EndTimeKoniec czasu trwania interwału w stosunku do czasu trwania sceny, w sekundach.
FrequencyJak często funkcja OnInterval powinna wystrzelić, w sekundach, z pierwszym wykonaniem na StartTime.
OnStartNiestandardowa funkcja do uruchamiania, gdy rozpoczyna się seria interwałów.
OnIntervalNiestandardowa funkcja, która strzela co określoną częstotliwością w określonym czasie (StartTime do EndTime).
OnEndNiestandardowa funkcja do uruchamiania, gdy kończy się seria interwałów.
SyncToAudioTabela określająca, czy należy zsynchronizować czas trwania interwału z konfiguracją dźwięku. Akceptuje następujące klucze:
  • Audio – Odniesienie do konfiguracji audio.
  • StartAtAudioTime – Kiedy rozpocząć czas trwania interwału w odniesieniu do czasu trwania dźwięk.
  • EndAtAudioTime – Opcjonalny czas, w którym kończy się czas trwania odstępu w odniesieniu do czasu trwania dźwięk.
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 konfiguracyjnyOpis
StartTimesTabela czasów rozpoczęcia w stosunku do czasu trwania sceny, w sekundach.
OnStartNiestandardowa funkcja, która strzela o każdej określonej porze w tabeli StartTimes.
SkippableBoolean 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 .
SyncToAudioTabela określająca, czy należy zsynchronizować harmonogram z konfiguracją audio. Akceptuje następujące klucze:
  • Audio – Odniesienie do konfiguracji audio.
  • StartAtAudioTimes – Tabela czasów rozpoczęcia określająca, kiedy należy uruchomić funkcję OnStart w odniesieniu do czasu trwania dźwięk.
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 serwera

    Schema.OnRun = function()
    print("OnRun (Server)")
    Schema:schedule({
    StartTimes = {5},
    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
  • Wywołanie niestandardowej funkcji "czyszczenia" w ModuleScript, która inicjalizuje połączenie lub inny odniesienie podczas życia cyklu OnRun.

    Schema serwera

    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)
    -- Wezwij funkcję "init" w niestandardowym module
    customModule.init()
    -- Wezwij funkcję "czystą" w niestandardowym module podczas sprzątania sceny
    Schema:inform(customModule, customModule.clean)
    end,
    })
    end
    ModuleScript - Personalizowany moduł

    local RunService = game:GetService("RunService")
    local CustomModule = {}
    CustomModule.init = function()
    -- Uruchom połączenie bicia serca
    CustomModule.connection = RunService.Heartbeat:Connect(function()
    end)
    end
    CustomModule.clean = function()
    -- Rozłącz i wyczyść połączenie bicia serca
    if CustomModule.connection then
    CustomModule.connection:Disconnect()
    CustomModule.connection = nil
    end
    end
    return 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() do
task.wait()
end
print("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)