EventSequencer adalah framework kuat yang memungkinkan Anda untuk membangun acara langsung, silang-server, dan adegan pada urutan tindakan dan pemicu yang terstruktur.Secara lebih spesifik, modul ini membantu Anda:
- Membangun acara atau adegan di framework terstruktur melalui konfigurasi audio, animasi, dan remaja yang dijadwalkan
- Transisi antara banyak adegan di banyak server, menyinkronkan animasi dan visual kompleks ke timeline.
- Cari melalui sebuah acara dan pratinjau pengalaman untuk tujuan pengujian dan pengembangan.
Fram kerangka ini telah diuji pertempuran di acara Roblox seperti Twenty One Pilots dan 24kGoldn konser, serta banyak pengalaman yang sangat dikunjungi.
Untuk melihat EventSequencer dalam tindakan di tempat yang dapat diedit, periksa template Konser di Roblox Studio.Template ini adalah titik awal yang komprehensif bagi pengembang untuk membuat acara/konser dan mengenal berbagai fitur dan komponen yang terlibat.

Penggunaan modul
Instalasi
Untuk menggunakan framework EventSequencer dalam pengalaman:
Pastikan pengurutan Model dipilih, lalu klik tombol Lihat Semua untuk Kategori .
Temukan dan klik ubin Modul Pengembang .
Temukan modul Pengatur Acara dan klik, atau seret dan lepaskan ke dalam tampilan 3D.
Di jendela Explorer, pindahkan seluruh model EventSequencer ke ServerScriptService .Setelah menjalankan pengalaman, modul akan didistribusikan ke berbagai layanan dan mulai berjalan.
Mode framework
Gantikan mode
Mode framework default adalah mengganti mode di mana Anda merancang adegan unik dengan menempatkan objek 3D , medan , properti pencahayaan , efek lingkungan , dan objek antarmuka pengguna ke dalam folder Lingkungan di dalam adegan tersebut.Ketika adegan dimuat, objek dan properti tersebut didistribusikan ke , , dan , menggantikan objek/properti yang ada untuk membentuk ruang klon.
Mode beruntunan
Mode framework alternatif adalah mode inline di mana Anda serupa merancang adegan unik dengan logika pemrograman untuk aliran/peristiwa mereka, tetapi framework tidak akan menghancurkan objek 3D eksisting , tanah , properti pencahayaan , efek lingkungan , dan objek antarmuka pengguna untuk mengkloning aset/proporsi dari sebuah folder Lingkungan dari sebuah adegan saat dimuat.
Untuk mengaktifkan mode inline:
Di dalam model EventSequencer yang Anda tempatkan di ServerScriptService , gali ke bawah dan pilih nilai Online di dalam folder ReplicatedStorage .
Di jendela Properti, aktifkan kotak centang Nilai nya.
Buat adegan
Sebuah adegan adalah pada dasarnya bagian dari acara keseluruhan atau adegan potong yang dibungkus dalam serangkaian folder .Setiap adegan berisi logika pemrograman yang mendefinisikan aliran/peristiwa, dan adegan dapat menyimpan objek 3D sendiri , medan , properti pencahayaan , efek lingkungan , dan objek antarmuka pengguna.
Untuk memulai dengan cepat, Anda dapat menemukan adegan kosong di dalam folder utama modul:
Perluas folder EventSequencer dan temukan folder BlankScene .
Pindahkan atau salin seluruh folder BlankScene ke dalam ReplicatedStorage .
Durasi waktu
Setiap adegan harus memiliki durasi waktu , dalam detik, mendefinisikan durasinya - seperti film atau konser memiliki durasi tertentu.Durasi waktu didefinisikan sebagai atribut numerik pada folder adegan bernama Panjang Waktu yang dapat Anda atur langsung di Studio atau secara programat melalui .


Lingkungan
Folder Lingkungan sebuah adegan berisi semua yang dilihat dan didengar pengguna, termasuk objek 3D, tanah, properti pencahayaan dan efek lingkungan, serta objek antarmuka pengguna.Ketika adegan dimuat, objek dan properti tersebut didistribusikan ke Workspace , Terrain , dan Lighting , menggantikan objek/properti yang ada untuk membentuk ruang klon.
Folder Lingkungan berisi kontainer berikut:
Wadah | Deskripsi |
---|---|
Pelanggan | Berisi semua aset untuk dimuat saat pengguna (klien) bergabung dengan acara, seperti objek antarmuka pengguna atau rakit animasi. |
PemainSpawns | Berisi bagian di mana pengguna muncul saat bergabung. Setiap bagian di folder ini berperilaku serupa dengan SpawnLocation . |
Pelayan | Berisi semua aset untuk dimuat saat adegan pertama dibuat di server. Disarankan agar sebagian besar aset visual pergi ke sini. |
Tanah | Berisi medan adegan. |
Penerangan | Berisi properti pencahayaan global sebagai atribut, serta modifikator seperti efek atmosfer dan efek post-processing. |
Peristiwa
Folder acara dari sebuah adegan adalah murni penanda untuk RemoteEvents yang berkomunikasi antara modul Klien dan Server.Ini bukan persyaratan untuk menempatkan apa pun di folder ini.
Pelanggan
Skrip ini mengeksekusi logika schema pada klien.
Pelayan
Skrip ini mengeksekusi logika schema di server.
Skema adegan
Skema adegan mendefinisikan apa yang terjadi pada titik mana dalam jadwal adegan.Anda harus mendefinisikan skema adegan di kedua modul Klien dan Server dan termasuk hook siklus kehidupan untuk mengelola ketika konfigurasi terjadi.
Pengait siklus kehidupan
Schema hook siklus kehidupan memungkinkan Anda mengelola ketika operasi adegan terjadi. Adegan dalam produksi biasanya akan berjalan di aliran paling sederhana:
Pada eksekusi mungkin terputus saat mencari:
- Pada Pengaturan → Pada Pelaksanaan … cari → Pada Pelaksanaan … cari → Pada Pelaksanaan → Pada Akhir Adegan
Ketiga hook juga dapat diulang jika adegan diputar ulang:
Konfigurasi
Schema konfigurasi mendefinisikan operasi inti dari adegan, misalnya memutar audio pada 00:32, mengantri animasi untuk sinkron dengan audio itu, menjadwalkan acara adegan seperti tampilkankembang api, dan banyak lagi.Setiap konfigurasi mendukung fungsi panggil balas tertentu di mana parameter pertama ( self ) adalah instansi konfigurasi.
Temukan adegan
Fitur unik dari EventSequencer adalah kemampuan untuk "mencari" di sekitar adegan seperti yang mungkin Anda cari melalui video.Di Mode Pengganti, Anda juga dapat beralih di antara adegan untuk melihat pratinjau seluruh acara multi-scene sebelum menyebarkannya ke produksi.
Pencarian adegan tidak dapat diakses oleh semua orang karena pengguna hanya menikmati acara seharusnya tidak memiliki kemampuan untuk mengendalikan aliran waktunya.Sebagai gantinya, Anda harus memberikan izin mencari berdasarkan acara dan kelompok khusus serta peran di dalamnya.
Buat baru Script dalam ServerScriptService .
Tempelkan kode berikut ke skrip baru.
Skrip - Tetapkan Pencarian Izinlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.setSeekingPermissions({placeIDs = {},userIDs = {},groups = {{GroupID = , MinimumRankID = },}})Isi tabel berikut dalam setSeekingPermissions panggilan sebagai berikut:
placeIDs Daftar terpisah koma dari PlaceId nilai untuk mendukung pencarian di dalam. userIDs Daftar terpisah koma dari UserIds untuk mereka yang dapat mencari di tempat-tempat yang didukung. groups Daftar tabel yang dibatasi koma, masing-masing berisi grup ID dan peringkat minimum anggota kelompok yang dapat dicari di tempat-tempat yang didukung.
Plugin manajer plugin
Plugin Manajer Adegan adalah alat berguna untuk memuat dan melepaskan adegan, pencahayaan, dan tanah.Kecuali Anda menggunakan Mode Online, sangat disarankan agar Anda menggunakan plugin ini alih-alih menempatkan/mengedit objek dan properti adegan secara manual.
Untuk menginstal plugin:
Dari menu Pandangan dari Studio, buka Kotak Alat .
Dengan tab Toko Pencipta dipilih, pilih Plugin dari menu dropdown.
Di bidang pencarian, ketik Manajer Adegan dan tekan Enter untuk menemukan plugin.
Klik ikon plugin untuk melihat detailnya dan kemudian klik tombol Instal .
Setelah plugin diinstal, muncul di tab Plugins di Studio.
Load dan unload adegan
Seperti yang dinyatakan dalam membuat adegan , folder Lingkungan adegan berisi semua yang dilihat dan didengar pengguna, termasuk objek 3D.Plugin membantu Anda dengan cepat memuat aset adegan ke dalam atau keluar dari folder terorganisir di ruang kerja.
Tindakan action | Deskripsi |
---|---|
Memuat Klien | Jika konten klien adegan tidak dimuat, pindahkan folder Lingkungan / Klien ke folder Ruang kerja / ScenesClient . |
Memuat Server | Jika konten server adegan tidak dimuat, pindahkan folder Lingkungan / Server ke folder Ruang kerja / ScenesServer . |
Lepaskan Klien | Jika konten klien adegan dimuat, pindahkan folder Klien dari Workspace / ScenesClient kembali ke folder [Scene] / Lingkungan . |
Turunkan Server | Jika konten server adegan dimuat, pindahkan folder Server dari Workspace / ScenesServer kembali ke folder [Scene] / Lingkungan . |
Lepaskan Semua Adegan | Pindahkan folder Klien dan Server setiap adegan yang dimuat kembali ke folder Lingkungan -nya. |
Simpan dan muat pencahayaan
Layanan tingkat atas Lighting menyimpan semua properti pencahayaan dan efek visual dari suatu tempat.Karena ini adalah layanan tingkat atas, Anda tidak dapat secara manual memindahkannya ke folder Lingkungan / Server / Lingkungan / Klien khusus.Sebagai gantinya, Anda dapat menggunakan plugin untuk menyalin properti dan anaknya ke folder Lingkungan / Pencahayaan scene.
Konfigurasi properti pencahayaan adegan , efek post-processing , efek atmosfer , dan skybox melalui layanan tingkat atas .
Di jendela plugin Manajer Adegan , klik Simpan Penerangan untuk adegan yang diinginkan.
Pilih dan perluas konfigurasi Lingkungan / Penerangan dari adegan itu dan Anda akan melihat properti pencahayaan yang sama seperti atribut dari folder, serta anak-anak klon dari layanan tingkat atas Lighting.
Instan kloning Atribut yang disimpan Setelah properti pencahayaan dan anak-anak disimpan untuk adegan, Anda dapat dengan cepat memuatnya kembali ke layanan tingkat atas Lighting dengan mengklik Load Lighting dari jendela plugin.
Simpan dan muat medan
Karena Terrain adalah kelas tingkat atas dalam Workspace , Anda tidak dapat secara manual memindahkan medan yang dihasilkan atau dibentuk ke folder Lingkungan / Server / Lingkungan / Klien .Sebagai gantinya, Anda dapat menggunakan plugin untuk menyalin ke folder Lingkungan / Tanah ke adegan.
Konfigurasi medan adegan melalui layanan tingkat atas Tanah .
Di jendela plugin Manajer Adegan , klik Simpan Tanah untuk adegan yang diinginkan.
Pilih dan perluas folder Lingkungan / Tanah dari adegan itu dan Anda akan melihat objek TerrainRegion yang mewakili medan yang disimpan.
Setelah medan disimpan untuk adegan, Anda dapat dengan cepat memuatnya kembali ke layanan tingkat atas Terrain dengan mengklik Load Terrain dari jendela plugin.
Referensi API
hook siklus kehidupan skema
Pada Pengaturan
hook siklus kehidupan OnSetup dimaksudkan untuk menginisialisasi aset dan variabel yang akan di referensikan di OnRun atau OnEndScene, menyiapkan connections yang dimaksudkan untuk berlangsung selama durasi adegan, dll.Hook ini menerima parameter timePositionObject yang memungkinkan Anda membaca waktu saat ini saat pengaturan.
Schema Klien
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)")
-- Akses lingkungan adegan; tidak berlaku untuk Mode Langsung
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- Tunggu aset
dummy = clientEnvironment:WaitForChild("Dummy")
print("Current time is:", timePositionObject.Value)
end
Skema Server
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)")
-- Akses lingkungan adegan; tidak berlaku untuk Mode Lini
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("Current time is:", timePositionObject.Value)
end
Pada Eksekusi
OnRun adalah hook siklus operasional utama dalam skema .Ini harus berisi semua konfigurasi berjangka untuk adegan dari bermain audio atau animasi untuk menjadwalkan acara seperti pertunjukan kembang api.
Schema Klien
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
Pada Akhir Adegan
hook siklus kehidupan OnEndScene berguna untuk membersihkan apa pun yang menonjol di adegan, seperti memutus koneksi yang dibuat di OnSetup atau OnRun yang tetap selama durasi adegan.
Skema Server
Schema.OnEndScene = function()
print("OnEndScene (Server)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
end
Konfigurasi skema
audio
Membuat objek Sound di ruang kerja yang dimainkan pada waktu tertentu.Suara kemudian dihapus setelah adegan selesai atau setelah objek Sound selesai dimainkan.
Kunci Konfigurasi | Deskripsi |
---|---|
StartTime | Kapan memutar audio dalam kaitannya dengan durasi adegan, dalam detik. |
SoundId | ID aset audio untuk main. |
OnStart | Fungsi khusus untuk menembak saat audio mulai diputar. |
OnEnd | Fungsi khusus untuk menembak saat audio selesai diputar. |
Volume | Volume dari objek Sound ; default adalah 0,5. |
Schema Klien
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
animasi
Membuat Animation yang dimainkan pada waktu tertentu.
Kunci Konfigurasi | Deskripsi |
---|---|
StartTime | Kapan memainkan animasi dalam kaitannya dengan durasi adegan, dalam detik. |
EndTime | Waktu opsional kapan harus mengakhiri animasi dalam kaitannya dengan durasi adegan, dalam detik. |
Rig | Rig animasi untuk memainkan animasi. |
AnimationId | ID aset animasi untuk dimainkan. |
Speed | Kecepatan putar animasi; default adalah 1. |
FadeInTime | Jumlah waktu untuk memudar dalam animasi, dalam detik; default adalah 0,2 (detik). |
FadeOutTime | Jumlah waktu untuk memudarkan animasi, dalam detik; default adalah 0,2 (detik). |
OnStart | Fungsi khusus untuk menembak saat animasi mulai dimainkan. |
OnEnd | Fungsi khusus untuk menembak saat animasi selesai diputar. |
Looped | Apakah untuk melingkar animasi; default adalah false . |
SyncToAudio | Tabel yang menentukan apakah akan menyinkronkan animasi ke konfigurasi audio. Menerima kunci berikut:
|
Schema Klien
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
anak muda
Membuat konfigurasi Tween yang dapat disesuaikan yang disimpan dalam pencarian dan dalam join dinamis, artinya Anda dapat menggabungkan remaja di titik terpisah dalam waktu dan semuanya harus bermain dan sinkron seperti yang diharapkan.
Kunci Konfigurasi | Deskripsi |
---|---|
StartTimes | Tabel waktu mulai dalam kaitannya dengan durasi adegan, dalam detik. |
Tween | Tabel yang mendefinisikan objek dan properti untuk tween. Menerima kunci berikut:
|
OnStart | Fungsi khusus untuk menembak saat remaja mulai bermain. |
OnHeartbeat | Fungsi khusus untuk menembak di setiap Heartbeat ; menerima alfa remaja sebagai parameter kedua. |
OnEnd | Fungsi khusus untuk menembak saat remaja selesai bermain. |
SyncToAudio | Tabel yang menentukan apakah akan menyinkronkan remaja ke konfigurasi audio. Menerima kunci berikut:
|
Schema Klien
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
interval
Menjalankan fungsi panggilan khusus selama durasi yang ditentukan di frekuensi tertentu, dalam detik.Berguna untuk mengulangi peristiwa seperti lampu berkedip, mengatur intensitas audio, dll.Frekuensi terendah yang mungkin adalah 0 detik, tetapi secara teknis frekuensi minimum selalu dibatasi pada Heartbeat.
Kunci Konfigurasi | Deskripsi |
---|---|
StartTime | Awal dari durasi interval dalam kaitannya dengan durasi adegan, dalam detik. |
EndTime | Akhir durasi interval dalam kaitannya dengan durasi adegan, dalam detik. |
Frequency | Seberapa sering fungsi OnInterval harus menembak, dalam beberapa detik, dengan eksekusi pertama berada di StartTime. |
OnStart | Fungsi khusus untuk menembak ketika serangkaian interval dimulai. |
OnInterval | Fungsi khusus untuk menembak di setiap interval dalam jangka waktu yang ditentukan ( StartTime ke EndTime ). |
OnEnd | Fungsi khusus untuk menembak saat serangkaian interval berakhir. |
SyncToAudio | Tabel yang menentukan apakah akan menyinkronkan durasi interval ke konfigurasi audio. Menerima kunci berikut:
|
Schema Klien
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
jadwal
Mirip dengan interval kecuali bahwa Anda dapat mendefinisikan beberapa waktu awal spesifik untuk peristiwa yang sama, seperti menjadwalkan tampilan kembang api dua kali di sebuah adegan.
Kunci Konfigurasi | Deskripsi |
---|---|
StartTimes | Tabel waktu mulai dalam kaitannya dengan durasi adegan, dalam detik. |
OnStart | Fungsi khusus untuk menembak pada setiap waktu yang ditentukan di tabel StartTimes. |
Skippable | Boolean menentukan apakah acara yang dijadwalkan dapat diabaikan untuk pengguna yang bergabung terlambat, atau saat mencari sebelum waktu mulai yang dijadwalkan.Jika diatur ke false , semua waktu mulai acara yang dijadwalkan sebelum waktu bergabung/mencari akan terjadi pada waktu bergabung/mencari itu.Jika diatur ke true , hanya waktu mulai yang dijadwalkan setelah bergabung/mencari akan terjadi.Standar adalah false . |
SyncToAudio | Tabel yang menentukan apakah akan menyinkronkan jadwal ke konfigurasi audio. Menerima kunci berikut:
|
Schema Klien
Schema.OnRun = function()
print("OnRun (Client)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- Inisialisasi koneksi denyut nadi sementara
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- Beritahu framework koneksi
Schema:inform(tempConnection)
end
})
end
informasi
Memberi tahu framework tentang modul, objek UI, koneksi, dllyang dibuat dalam hook siklus kehidupan OnRun, memastikan mereka dibersihkan dengan benar saat mencari.Kasus penggunaan termasuk:
Memberi tahu framework koneksi sementara ad-hoc seperti RunService.Heartbeat sehingga koneksi dibersihkan saat mencari titik sebelumnya dalam durasi adegan.
Skema ServerSchema.OnRun = function()print("OnRun (Server)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Inisialisasi koneksi denyut nadi sementaralocal tempConnection = RunService.Heartbeat:Connect(function()end)-- Beritahu framework koneksiSchema:inform(tempConnection)end})endMemanggil fungsi "pembersihan" khusus di ModuleScript yang menginisialisasi koneksi atau referensi lain selama hook siklus kehidupan OnRun.
Skema Serverlocal 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)-- Panggil fungsi "init" di modul khususcustomModule.init()-- Panggil fungsi "bersih" di modul khusus saat membersihkan adeganSchema:inform(customModule, customModule.clean)end,})endModuleScript - Modul Kustomlocal RunService = game:GetService("RunService")local CustomModule = {}CustomModule.init = function()-- Inisialisasi koneksi detak jantungCustomModule.connection = RunService.Heartbeat:Connect(function()end)endCustomModule.clean = function()-- Putuskan dan hapus koneksi detak jantungif CustomModule.connection thenCustomModule.connection:Disconnect()CustomModule.connection = nilendendreturn CustomModule
Fungsi
memuatScene
loadScene(sceneName: string , waktu mulai: number ?)
Memuat adegan secara programatik oleh sceneName dan memulainya di startTime dari awalnya.Akan ada 5 detik "periode kasih" untuk adegan dimuat dari server sebelum pencarian terjadi dan adegan mulai bermain.Ini berarti bahwa jika Anda menelepon loadScene("[SceneName]", 20) pada pukul 4:15:00 PM, framework akan menunggu 5 detik selain 20 yang diminta, memulai adegan pada pukul 4:15:25 PM.
Skrip
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Tentukan adegan berikutnya untuk dimuat saat adegan saat ini selesai
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- Acara "PreShow" berakhir; muat adegan pertama di konser
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- Track1" berakhir; muat adegan kedua di konser
EventSequencer.loadScene("Track2")
else
-- Putar kembali ke adegan pra-pertunjukan
EventSequencer.loadScene("PreShow")
end
end)
membuat Schema
membuat Schema(): table
Kembalikan instansi dari skema adegan untuk membuat logika untuk adegan.
Schema Klien
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
Schema.OnSetup = function(timePositionObject)
print("OnSetup (Client)")
end
mencari
mencari(waktu: number )
Mencari nilai time , dalam beberapa detik, dari awal adegan yang saat ini dimuat.
Skrip
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.seek(95.58)
atur waktu peringatan adegan
setSceneWarningTime(endSceneTimeWindow: number )
Tetapkan jumlah waktu dari akhir dari semua adegan di mana peringatan dikirimkan .Anda dapat mendeteksi peringatan dari sisi klien melalui di onSceneEndingWarningForClient atau sisi server melalui di onSceneEndingWarningForServer.
Skrip
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Muat adegan
EventSequencer.loadScene("BeautifulScene")
-- Atur waktu peringatan menjadi 5 detik sebelum adegan berakhir
EventSequencer.setSceneWarningTime(5)
-- Deteksi ketika adegan akan akhiri
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)
menetapkanSeekingPermissions
setSeekingPermissions(permisi: table )
Memberikan izin mencari izin berdasarkan peristiwa PlaceId serta kelompok dan peran khusus UserIds dan / atau grup dalamnya.Lihat cari dan beralih adegan untuk informasi lebih lanjut.
dapatkanLingkungan Adegan Saat Ini
getCurrentSceneEnvironment(): Folder (YIELDS)
Kembalikan folder Lingkungan klien atau sisi server dari adegan saat ini, tergantung pada apakah itu dipanggil dari skrip skema Klien atau skrip skema Server masing-masing.
Schema Klien
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)")
-- Akses lingkungan adegan; tidak berlaku untuk Mode Langsung
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end
Skema Server
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
dapatkanEnvironment Server Saat Ini dari Klien
mendapatkan Lingkungan Server Saat Ini dari Klien: Folder (YIELDS)
Kembalikan folder Lingkungan server-sisi saat ini dari adegan.Tidak seperti getCurrentSceneEnvironment, Anda dapat memanggil ini dari skrip skema Klien.
Schema Klien
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)")
-- Akses lingkungan adegan; tidak berlaku untuk Mode Langsung
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Current time is:", timePositionObject.Value)
end
memuat adegan
memuat adegan(): boolean
Dipanggil dari server untuk mengetahui apakah adegan sedang dimuat saat ini.
Skrip
local ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))print(EventSequencer.isLoadingScene())while EventSequencer.isLoadingScene() dotask.wait()endprint("Scene loaded")
Peristiwa
pada Peringatan Akhir Panggung untuk Klien
Api pada klien sebelum adegan akan akhiri.Waktu default adalah 3 detik, tetapi Anda dapat mengkonfigurnya melalui setSceneWarningTime.Acara ini hanya dapat terhubung di LocalScript .
Skrip Lokal
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Deteksi ketika adegan akan berakhir (sisi klien)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("Scene is about to end!")
end)
pada Peringatan Akhir Panggung untuk Server
Api di server sebelum adegan akan akhiri.Waktu default adalah 3 detik, tetapi Anda dapat mengkonfigurnya melalui setSceneWarningTime.Acara ini hanya dapat terhubung di Script .
Skrip
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Deteksi ketika adegan akan berakhir (sisi server)
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Scene is about to end!")
end)
pada onSceneLoadedForClient
Api terjadi pada klien saat adegan dimulai. Acara ini hanya dapat terhubung dalam LocalScript .
Skrip Lokal
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Deteksi ketika adegan dimulai (sisi klien)
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("Scene is starting!")
end)
padaOrkestrasiFinished
Api di server ketika adegan telah mencapai panjang waktunya dan telah berakhir secara efektif.Acara ini menerima argumen nama string endedSceneName untuk adegan yang baru saja selesai dan Anda dapat mengaitkan acara ini ke kondisi memuat adegan lain .Hanya dapat terhubung di Script .
Skrip
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Tentukan adegan berikutnya untuk dimuat saat adegan saat ini selesai
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "PreShow" then
-- Acara "PreShow" berakhir; muat adegan pertama di konser
EventSequencer.loadScene("Track1")
elseif endedSceneName == "Track1" then
-- Track1" berakhir; muat adegan kedua di konser
EventSequencer.loadScene("Track2")
else
-- Putar kembali ke adegan pra-pertunjukan
EventSequencer.loadScene("PreShow")
end
end)