Pengurut Acara

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

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:

  1. Dari Pandangan, buka Kotak Alat dan pilih tab Toko Pencipta .

    Toolbox toggle button in Studio
  2. Pastikan pengurutan Model dipilih, lalu klik tombol Lihat Semua untuk Kategori .

  3. Temukan dan klik ubin Modul Pengembang .

  4. Temukan modul Pengatur Acara dan klik, atau seret dan lepaskan ke dalam tampilan 3D.

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

  1. Di dalam model EventSequencer yang Anda tempatkan di ServerScriptService , gali ke bawah dan pilih nilai Online di dalam folder ReplicatedStorage .

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

  1. Perluas folder EventSequencer dan temukan folder BlankScene .

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

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

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.

  1. Buat baru Script dalam ServerScriptService .

  2. Tempelkan kode berikut ke skrip baru.

    Skrip - Tetapkan Pencarian Izin

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
    EventSequencer.setSeekingPermissions({
    placeIDs = {},
    userIDs = {},
    groups = {
    {GroupID = , MinimumRankID = },
    }
    })
  3. Isi tabel berikut dalam setSeekingPermissions panggilan sebagai berikut:

    placeIDsDaftar terpisah koma dari PlaceId nilai untuk mendukung pencarian di dalam.
    userIDsDaftar terpisah koma dari UserIds untuk mereka yang dapat mencari di tempat-tempat yang didukung.
    groupsDaftar 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:

  1. Dari menu Pandangan dari Studio, buka Kotak Alat .

    Toolbox toggle button in Studio
  2. Dengan tab Toko Pencipta dipilih, pilih Plugin dari menu dropdown.

  3. Di bidang pencarian, ketik Manajer Adegan dan tekan Enter untuk menemukan plugin.

  4. Klik ikon plugin untuk melihat detailnya dan kemudian klik tombol Instal .

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

  1. Konfigurasi properti pencahayaan adegan , efek post-processing , efek atmosfer , dan skybox melalui layanan tingkat atas .

  2. Di jendela plugin Manajer Adegan , klik Simpan Penerangan untuk adegan yang diinginkan.

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

  1. Konfigurasi medan adegan melalui layanan tingkat atas Tanah .

  2. Di jendela plugin Manajer Adegan , klik Simpan Tanah untuk adegan yang diinginkan.

  3. 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 KonfigurasiDeskripsi
StartTimeKapan memutar audio dalam kaitannya dengan durasi adegan, dalam detik.
SoundIdID aset audio untuk main.
OnStartFungsi khusus untuk menembak saat audio mulai diputar.
OnEndFungsi khusus untuk menembak saat audio selesai diputar.
VolumeVolume 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 KonfigurasiDeskripsi
StartTimeKapan memainkan animasi dalam kaitannya dengan durasi adegan, dalam detik.
EndTimeWaktu opsional kapan harus mengakhiri animasi dalam kaitannya dengan durasi adegan, dalam detik.
RigRig animasi untuk memainkan animasi.
AnimationIdID aset animasi untuk dimainkan.
SpeedKecepatan putar animasi; default adalah 1.
FadeInTimeJumlah waktu untuk memudar dalam animasi, dalam detik; default adalah 0,2 (detik).
FadeOutTimeJumlah waktu untuk memudarkan animasi, dalam detik; default adalah 0,2 (detik).
OnStartFungsi khusus untuk menembak saat animasi mulai dimainkan.
OnEndFungsi khusus untuk menembak saat animasi selesai diputar.
LoopedApakah untuk melingkar animasi; default adalah false .
SyncToAudioTabel yang menentukan apakah akan menyinkronkan animasi ke konfigurasi audio. Menerima kunci berikut:
  • Audio – Referensi ke konfigurasi audio .
  • StartAtAudioTime – Kapan memutar animasi dalam kaitannya dengan durasi audio.
  • EndAtAudioTime – Waktu opsional untuk mengakhiri animasi dalam kaitannya dengan durasi audio.
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 KonfigurasiDeskripsi
StartTimesTabel waktu mulai dalam kaitannya dengan durasi adegan, dalam detik.
TweenTabel yang mendefinisikan objek dan properti untuk tween. Menerima kunci berikut:
OnStartFungsi khusus untuk menembak saat remaja mulai bermain.
OnHeartbeatFungsi khusus untuk menembak di setiap Heartbeat ; menerima alfa remaja sebagai parameter kedua.
OnEndFungsi khusus untuk menembak saat remaja selesai bermain.
SyncToAudioTabel yang menentukan apakah akan menyinkronkan remaja ke konfigurasi audio. Menerima kunci berikut:
  • Audio – Referensi ke konfigurasi audio .
  • StartAtAudioTimes – Tabel waktu mulai yang mendefinisikan kapan harus memainkan remaja dalam kaitannya dengan durasi audio.
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 KonfigurasiDeskripsi
StartTimeAwal dari durasi interval dalam kaitannya dengan durasi adegan, dalam detik.
EndTimeAkhir durasi interval dalam kaitannya dengan durasi adegan, dalam detik.
FrequencySeberapa sering fungsi OnInterval harus menembak, dalam beberapa detik, dengan eksekusi pertama berada di StartTime.
OnStartFungsi khusus untuk menembak ketika serangkaian interval dimulai.
OnIntervalFungsi khusus untuk menembak di setiap interval dalam jangka waktu yang ditentukan ( StartTime ke EndTime ).
OnEndFungsi khusus untuk menembak saat serangkaian interval berakhir.
SyncToAudioTabel yang menentukan apakah akan menyinkronkan durasi interval ke konfigurasi audio. Menerima kunci berikut:
  • Audio – Referensi ke konfigurasi audio .
  • StartAtAudioTime – Kapan harus memulai durasi interval dalam kaitannya dengan durasi audio.
  • EndAtAudioTime – Waktu opsional untuk mengakhiri durasi interval dalam kaitannya dengan durasi audio.
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 KonfigurasiDeskripsi
StartTimesTabel waktu mulai dalam kaitannya dengan durasi adegan, dalam detik.
OnStartFungsi khusus untuk menembak pada setiap waktu yang ditentukan di tabel StartTimes.
SkippableBoolean 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 .
SyncToAudioTabel yang menentukan apakah akan menyinkronkan jadwal ke konfigurasi audio. Menerima kunci berikut:
  • Audio – Referensi ke konfigurasi audio .
  • StartAtAudioTimes – Tabel waktu mulai yang mendefinisikan kapan menembakkan fungsi OnStart dalam kaitannya dengan durasi audio.
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 Server

    Schema.OnRun = function()
    print("OnRun (Server)")
    Schema:schedule({
    StartTimes = {5},
    OnStart = function(self)
    -- Inisialisasi koneksi denyut nadi sementara
    local tempConnection = RunService.Heartbeat:Connect(function()
    end)
    -- Beritahu framework koneksi
    Schema:inform(tempConnection)
    end
    })
    end
  • Memanggil fungsi "pembersihan" khusus di ModuleScript yang menginisialisasi koneksi atau referensi lain selama hook siklus kehidupan OnRun.

    Skema Server

    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)
    -- Panggil fungsi "init" di modul khusus
    customModule.init()
    -- Panggil fungsi "bersih" di modul khusus saat membersihkan adegan
    Schema:inform(customModule, customModule.clean)
    end,
    })
    end
    ModuleScript - Modul Kustom

    local RunService = game:GetService("RunService")
    local CustomModule = {}
    CustomModule.init = function()
    -- Inisialisasi koneksi detak jantung
    CustomModule.connection = RunService.Heartbeat:Connect(function()
    end)
    end
    CustomModule.clean = function()
    -- Putuskan dan hapus koneksi detak jantung
    if CustomModule.connection then
    CustomModule.connection:Disconnect()
    CustomModule.connection = nil
    end
    end
    return 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() do
task.wait()
end
print("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)