Olay Sıralayıcı, yapılandırılmış bir eylem ve tetikleme dizisi üzerinde canlı, çok sunuculu olaylar ve kesitler oluşturmanıza olanak tanıyan güçlü bir çerçevedir. Daha spesifik olarak, bu modül size şunları sağlar:
- Ses, animasyonlar ve tween'lerin planlanmış yapılandırmaları aracılığıyla yapılandırılmış bir çerçevede bir olay veya kesit oluşturun.
- Çok sayıda sahne arasında geçiş yapın ve karmaşık animasyonları ve görselleri bir zaman çizelgesine senkronize edin.
- Bir olayı arayın ve test ve geliştirme amaçları için deneyimi önizleyin.
Bu çerçeve, Roblox etkinliklerinde Twenty One Pilots ve 24kGoldn konserleri gibi birçok oldukça ziyaret edilen deneyimde test edilmiştir.
Olay Sıralayıcı'yı düzenlenebilir bir yerde eylemde görmek için, Roblox Studio'daki Konser şablonuna göz atın. Bu şablon, geliştiricilerin etkinlikler/konserler oluşturması ve ilgili çeşitli özellikler ve bileşenler hakkında bilgi sahibi olmaları için kapsamlı bir başlangıç noktasıdır.

Modül kullanımı
Kurulum
Olay Sıralayıcı çerçevesini bir deneyimde kullanmak için:
Studio'nun Pencere menüsünden veya Ana Sayfa sekmesi araç çubuğundan Araç Kutusu'nu açın ve Yaratıcı Mağaza sekmesini seçin.

Modeller sıralamasının seçili olduğundan emin olun, ardından Kategoriler için Tümünü Gör butonuna tıklayın.

Paketler kutusunu bulun ve tıklayın.
Olay Sıralayıcı modülünü bulun ve tıklayın veya 3D görünümüne sürükleyip bırakın.

Gezgin penceresinde, tüm Olay Sıralayıcı modelini ServerScriptService içine taşıyın. Deneyim çalıştığında modül çalışmaya başlayacaktır.
Çerçeve modları
Değiştir mod
Varsayılan çerçeve modu, özel sahne tasarımına olanak tanıyan değiştir modadır; burada sahne içindeki 3D nesneler, terrain, aydınlatma özellikleri, çevresel etkiler ve kullanıcı arayüzü nesneleri için Çevre klasörün içine yerleştirilir. Bir sahne yüklendiğinde, bu nesneler ve özellikler Workspace, Terrain ve Lighting'e dağıtılır; mevcut nesneleri/özellikleri değiştirerek kopyalanmış bir alan oluşturur.
Satır içi mod
Alternatif bir çerçeve modu olan satır içi moda, akışları/olayları için betik mantığı ile benzer şekilde tasarlayabileceğiniz özel sahne modudur; ancak çerçeve, yüklendiğinde bir sahnenin Çevre klasöründeki varlıkları/bileşenleri kopyalamak için mevcut olan 3D nesneler, terrain, aydınlatma özellikleri, çevresel etkiler ve kullanıcı arayüzü nesnelerini silmez.
Satır içi modu etkinleştirmek için:
ServerScriptService'e yerleştirdiğiniz Olay Sıralayıcı modelinin içine inin ve ReplicatedStorage klasörü içindeki Satır İçinde değerini seçin.

Özellikler penceresinde Değer onay kutusunu etkinleştirin.

Sahne oluşturma
Sahne, temelde bir etkinliğin veya kesitin bir parçasıdır ve bir dizi klasöre kaplanmıştır. Her sahne, akışını/olaylarını tanımlayan betik mantığı içerir ve bir sahne kendi 3D nesneleri, terrain, aydınlatma özellikleri, çevresel etkiler ve kullanıcı arayüzü nesnelerini depolayabilir.
Hızlı başlamak için, modülün ana klasörü içinde boş bir sahne bulabilirsiniz:
Olay Sıralayıcı klasörünü genişletin ve BoşSahne klasörünü bulun.

Tüm BoşSahne klasörünü ReplicatedStorage'e taşıyın veya kopyalayın.

Zaman uzunluğu
Her sahne, süresini tanımlayan bir zaman uzunluğu ile saniye cinsinden belirtilmelidir - t tıpkı bir filmin veya konserin belirli bir süresi olduğu gibi. Zaman uzunluğu, sahne klasörü içinde ZamanUzunluğu adlı sayısal bir özellik olarak tanımlanır ve bu, doğrudan Studio'ya ayarlanabilir veya programlı olarak Instance:SetAttribute() aracılığıyla ayarlanabilir.


Çevre
Bir sahnenin Çevre klasörü, kullanıcıların gördüğü ve duyduğu her şeyi içerir; bunun içinde 3D nesneler, terrain, aydınlatma özellikleri ve çevresel etkiler ve kullanıcı arayüzü nesneleri bulunur. Bir sahne yüklendiğinde, bu nesneler ve özellikler Workspace, Terrain ve Lighting'e dağıtılır; mevcut nesneleri/özellikleri değiştirerek kopyalanmış bir alan oluşturur.
Çevre klasörü aşağıdaki kapları içerir:
| Kap | Açıklama |
|---|---|
| İstemci | Herhangi bir kullanıcının (istemci) etkinliğe katıldığında yüklenmesi gereken tüm varlıkları içerir; örneğin kullanıcı arayüzü nesneleri veya bir animasyon rig'i. |
| OyuncuDoğumYerleri | Kullanıcıların katıldıklarında doğacakları parçaları içerir. Bu klasördeki her parça, SpawnLocation gibi davranır. |
| Sunucu | Bir sahne, ilk kez bir sunucuda oluşturulduğunda yüklenmesi gereken tüm varlıkları içerir. Çoğu görsel varlığın buraya gitmesi önerilir. |
| Terrain | Sahne arazisini içerir. |
| Aydınlatma | Küresel aydınlatma özellikleri olarak veri türü, ayrıca atmosferik etkiler ve sonrası işleme gibi modifikörleri içerir. |
Olaylar
Bir sahnenin Olaylar klasörü, İstemci ve Sunucu modülleri arasında iletişim kuran RemoteEvents için yalnızca bir yer tutucudur. Bu klasörde herhangi bir şey yerleştirmek zorunlu değildir.
İstemci
Bu betik, istemcide şemayı yürütür.
Sunucu
Bu betik, sunucuda şemayı yürütür.
Sahne şemaları
Bir sahnenin şeması, sahnenin zaman çizelgesinde ne zaman ne olacağını tanımlar. Bir sahne şemasını İstemci ve Sunucu modüllerinde tanımlamanız ve yaşam döngüsü kancaları eklemeniz gerekir.
Yaşam döngüsü kancaları
Şema yaşam döngüsü kancaları, sahne işlemlerinin ne zaman gerçekleşeceğini yönetmenizi sağlar. Üretimde bir sahne genellikle en basit akışta çalışır:
OnRun arama sırasında kesintiye uğrayabilir:
Tüm üç kanca, sahne yeniden oynatıldığında tekrar edebilir:
Yapılandırmalar
Şema yapılandırmaları, bir sahnenin temel işlemlerini tanımlar; örneğin, ses çalmayı 00:32'de gerçekleştirmek, bir animasyonu sesle senkronize etmek, bir sahne etkinliği planlayarak havai fişek gösterisi gibi daha fazlasını yapmak. Her yapılandırma, ilk parametre (self) yapılandırma örneği olacak belirli geri çağırma işlevlerini destekler.
Sahne ara
Olay Sıralayıcı'nın benzersiz bir özelliği, bir videoda olduğu gibi sahnelerde "arama" yapabilme yeteneğidir. Değiştir mod içindeyken, aynı zamanda sahneler arasında geçiş yapabilir ve üretime geçmeden önce tüm çok sahneli bir etkinliği inceleyebilirsiniz.
Sahne aramaları herkesin erişimine açık değildir çünkü etkinlikten sadece keyif alan kullanıcıların zaman akışını kontrol etme yetkisi olmamalıdır. Bunun yerine, etkinliğin PlaceId değerine, ayrıca belirli UserIds ve/veya gruplar ve bunlar içindeki rollerine dayalı olarak arama izni sağlamanız gerekir.
ServerScriptService içinde yeni bir Script oluşturun.
Yeni betiğe aşağıdaki kodu yapıştırın.
Betiği - Arama İzinlerini Ayarlalocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.setSeekingPermissions({placeIDs = {},userIDs = {},groups = {{GroupID = , MinimumRankID = },}})Aşağıdaki tabloları setSeekingPermissions çağrısında aşağıdaki gibi doldurun:
placeIDs Aramanın destekleneceği PlaceId değerlerinin virgülle ayrılmış listesi. userIDs Desteklenen yerlerde arama yapabilecek kişilerin UserIds değerlerinin virgülle ayrılmış listesi. groups Her biri bir grup kimliğini ve desteklenen yerlerde arama yapabilecek olan grup üyelerinin en düşük rütbesini içeren tabloların virgülle ayrılmış listesi.
Sahne yöneticisi eklentisi
Sahne Yöneticisi eklentisi, sahneleri yüklemek ve boşaltmak, aydınlatma ve terrain için kullanışlı bir araçtır. Satır İçi Mod kullanmıyorsanız, bu eklentiyi, sahne nesnelerini ve özelliklerini manuel olarak yerleştirmek/düzenlemek yerine kullanmanız şiddetle önerilir.
Eklentiyi yüklemek için:
Studio'nun Pencere menüsünden veya Ana Sayfa sekmesi araç çubuğundan Araç Kutusu'nu açın.
Yaratıcı Mağaza sekmesi seçili iken, açılır menüden Eklentiler'i seçin.
Arama alanına Sahne Yöneticisi yazın ve eklentiyi bulmak için Enter tuşuna basın.

Eklentinin ayrıntılarını görmek için eklenti simgesine tıklayın ve ardından Yükle butonuna tıklayın.
Eklenti yüklendikten sonra, Studio'nun Eklentiler sekmesinde görünecektir.
Sahne yükleme ve boşaltma
**Sahne oluşturma ile açıklandığı gibi, bir sahnenin Çevre klasörü, kullanıcıların gördüğü ve duyduğu her şeyi içerir; bunun içinde 3D nesneler vardır. Eklenti, bir sahnenin varlıklarını çalışma alanındaki organize klasörlere yüklemenize veya çıkarmanıza yardımcı olur.
| Eklenti eylemi | Açıklama |
|---|---|
| İstemciyi Yükle | Eğer sahnenin istemci içeriği boşaltıldıysa, Çevre/İstemci klasörünü Çalışma Alanı/Sahneİstemci klasörüne taşır. |
| Sunucuyu Yükle | Eğer sahnenin sunucu içeriği boşaltıldıysa, Çevre/Sunucu klasörünü Çalışma Alanı/SahneSunucu klasörüne taşır. |
| İstemciyi Boşalt | Eğer sahnenin istemci içeriği yüklüyse, İstemci klasörünü Çalışma Alanı/Sahneİstemci'den [Sahne]/Çevre klasörüne geri taşır. |
| Sunucuyu Boşalt | Eğer sahnenin sunucu içeriği yüklüyse, Sunucu klasörünü Çalışma Alanı/SahneSunucu'dan [Sahne]/Çevre klasörüne geri taşır. |
| Tüm Sahneleri Boşalt | Yüklenmiş her sahnenin İstemci ve Sunucu klasörünü geri Çevre klasörüne taşır. |
Aydınlatmayı kaydetme ve yükleme
En üst düzey Lighting servisi, bir yerin tüm aydınlatma özelliklerini ve görsel efektlerini depolar. Üst düzey bir servis olduğu için, onu belirli bir sahnenin Çevre/Sunucu veya Çevre/İstemci klasörüne manuel olarak taşıyamazsınız. Bunun yerine, eklentiyi kullanarak özelliklerini ve çocuklarını sahnenin Çevre/Aydınlatma klasörüne kopyalayabilirsiniz.
Sahnenin aydınlatma özelliklerini, sonrası işleme efektlerini, atmosferik etkileri ve gökyüzü kutularını üst düzey Lighting servisi aracılığıyla yapılandırın.

Sahne Yöneticisi eklenti penceresinde, istediğiniz sahne için Aydınlatmayı Kaydet'e tıklayın.
O sahnenin Çevre/Aydınlatma yapılandırmasını seçip genişlettiğinizde, klasörün nitelikleri olarak aynı aydınlatma özelliklerini ve üst düzey Lighting servisine ait kopyalanmış çocukları göreceksiniz.

Kopyalanmış örnekler 
Kayıtlı nitelikler Aydınlatma özellikleri ve çocuklar bir sahne için kaydedildikten sonra, bunları Aydınlatmayı Yükle seçeneği ile hızlıca geri üst düzey Lighting servisine yükleyebilirsiniz.
Terrain kaydetme ve yükleme
Terrain üst düzey bir sınıf olduğu için, onu belirli bir sahnenin Çevre/Sunucu veya Çevre/İstemci klasörüne manuel olarak taşıyamazsınız. Bunun yerine, eklentiyi kullanarak sahnenin Çevre/Terrain klasörüne kopyalayabilirsiniz.
Sahnenizin arazisini üst düzey Terrain servisi aracılığıyla yapılandırın.

Sahne Yöneticisi eklenti penceresinde, istediğiniz sahne için Arazileri Kaydet'e tıklayın.
O sahnenin Çevre/Terrain klasörünü seçin ve genişlettiğinizde, kaydedilmiş arazileri temsil eden bir TerrainRegion nesnesini göreceksiniz.

Bir sahne için arazi kaydedildikten sonra, hızlıca yüklemek için Arazileri Yükle seçeneğini tıklayabilirsiniz.
API referansı
Şema yaşam döngüsü kancaları
OnSetup
OnSetup yaşam döngüsü kancası, OnRun veya OnEndScene içinde atıfta bulunulacak varlıkları ve değişkenleri başlatmak, sahne süresi boyunca sürecek bağlantıları ayarlamak, vb. için düşünülmüştür. Bu kanca, kurulum sırasında mevcut zamanın okunmasına olanak tanıyan timePositionObject parametresini alır.
İstemci Şeması
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 (İstemci)")
-- Sahne ortamlarına erişim; Satır İçi Mod için geçerli değildir
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
-- Varlıkları bekleyin
dummy = clientEnvironment:WaitForChild("Dummy")
print("Mevcut zaman:", timePositionObject.Value)
end
Sunucu Şeması
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 (Sunucu)")
-- Sahne ortamına erişim; Satır İçi Mod için geçerli değildir
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
print("Mevcut zaman:", timePositionObject.Value)
end
OnRun
OnRun, şema içindeki ana operasyonel yaşam döngüsü kancasıdır. Ses çalmaktan veya bir animasyondan etkinlik planlamaya kadar bir sahne için tüm zamanlı yapılandırmaları içermelidir.
İstemci Şeması
Schema.OnRun = function()
print("OnRun (İstemci)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("Ses çalıyor")
end,
OnEnd = function(self)
print("Ses sona erdi")
end
})
end
OnEndScene
OnEndScene yaşam döngüsü kancası, sahnede kalan her şeyi temizlemek, örneğin OnSetup veya OnRun içinde, sahnenin süresince kalan bağlantıları koparmak için kullanışlıdır.
Sunucu Şeması
Schema.OnEndScene = function()
print("OnEndScene (Sunucu)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
end
Şema yapılandırmaları
audio
Belirli bir zamanda çalınan bir Sound nesnesi oluşturur. Ses, sahne sona erdikten sonra veya Sound nesnesi çalmayı bitirdiğinde silinir.
| Yapılandırma Anahtarı | Açıklama |
|---|---|
| StartTime | Sesin sahnenin süresine bağlı olarak ne zaman çalması gerektiği, saniye cinsinden. |
| SoundId | Çalınacak sesin varlık kimliği. |
| OnStart | Ses çalmaya başladığında tetiklenecek özel işlev. |
| OnEnd | Ses çaldıktan sona erdiğinde tetiklenecek özel işlev. |
| Volume | Sound nesnesinin sesi; varsayılan 0.5'tir. |
İstemci Şeması
Schema.OnRun = function()
print("OnRun (İstemci)")
local MainAudio = Schema:audio({
StartTime = 1,
SoundId = "rbxassetid://1838673350",
OnStart = function(self)
print("Ses çalıyor")
end,
OnEnd = function(self)
print("Ses sona erdi")
end
})
end
animate
Belirli bir zamanda çalınacak bir Animation oluşturur.
| Yapılandırma Anahtarı | Açıklama |
|---|---|
| StartTime | Animasyonun sahne süresine bağlı olarak ne zaman çalınacağı, saniye cinsinden. |
| EndTime | Animasyonun sahne süresine bağlı olarak sona ereceği isteğe bağlı zaman, saniye cinsinden. |
| Rig | Animasyonun çalınacağı animasyon rig'i. |
| AnimationId | Çalınacak animasyonun varlık kimliği. |
| Speed | Animasyonun oynatma hızı; varsayılan 1'dir. |
| FadeInTime | Animasyonun ne kadar sürede açılacağını, saniye cinsinden; varsayılan 0.2 (saniye). |
| FadeOutTime | Animasyonun ne kadar sürede kapanacağını, saniye cinsinden; varsayılan 0.2 (saniye). |
| OnStart | Animasyon çalmaya başladığında tetiklenecek özel işlev. |
| OnEnd | Animasyon çaldıktan sona erdiğinde tetiklenecek özel işlev. |
| Looped | Animasyonun döngüde olup olmadığı; varsayılan false'dır. |
| SyncToAudio | Animasyonun bir ses yapılandırması ile senkronize olup olmayacağına dair tablo. Aşağıdaki anahtarları kabul eder:
|
İstemci Şeması
Schema.OnRun = function()
print("OnRun (İstemci)")
local MainAudio = Schema:audio({
AnimationId = "rbxassetid://3695333486",
Rig = Dummy,
Speed = 1,
FadeInTime = 0.1,
FadeOutTime = 0.3,
SyncToAudio = {
Audio = MainAudio,
StartAtAudioTime = 5,
},
OnStart = function(self)
print("Animasyon çalıyor")
end,
OnEnd = function(self)
print("Animasyon durdu")
end
})
end
tween
Senkronizasyon ve dinamik katılım sürekliliği korunacak olan yapılandırılabilir bir Tween oluşturur; bu, farklı zaman dilimlerinde tween'leri zincirleme olanağı sağlar ve her şey beklenildiği gibi çalışır ve senkronize olur.
| Yapılandırma Anahtarı | Açıklama |
|---|---|
| StartTimes | Sahne süresine bağlı olarak başlangıç zamanlarının tablosu, saniye cinsinden. |
| Tween | Tweed edilen nesneyi ve özellikleri tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
|
| OnStart | Tween çalmaya başladığında tetiklenecek özel işlev. |
| OnHeartbeat | Her Kalp Atışı'nda tetiklenecek özel işlev; ikinci parametre olarak tween alpha'sını alır. |
| OnEnd | Tween tamamlandığında tetiklenecek özel işlev. |
| SyncToAudio | Tween'i bir ses yapılandırması ile senkronize etme durumunu tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
|
İstemci Şeması
Schema.OnRun = function()
print("OnRun (İstemci)")
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 çalıyor")
end,
OnHeartbeat = function(self, alpha)
print("Tween alpha", alpha)
end,
OnEnd = function(self)
print("Tween tamamlandı")
end,
})
end
interval
Belirli bir süre boyunca belirli bir sıklıkta, saniye cinsinden özel geri çağırma işlevi yürütülmesini sağlar. Aynı zamanda, yanıp sönen ışıklar, sesin yoğunluğunu artırıp azaltmak gibi tekrar eden olaylar için yararlıdır. En düşük olası sıklık 0 saniye olarak kabul edilir, ancak teknik olarak minimum sıklık her zaman Kalp Atışı'na sınırlandırılır.
| Yapılandırma Anahtarı | Açıklama |
|---|---|
| StartTime | Belirtilen süre içinde aralığın başlangıcı, sahne süresine bağlı olarak, saniye cinsinden. |
| EndTime | Belirtilen süre içinde aralığın sonu, sahne süresine bağlı olarak, saniye cinsinden. |
| Frequency | OnInterval işlevinin ne sıklıkta tetikleneceği, saniye cinsinden; ilk çalıştırma StartTime'da gerçekleşmektedir. |
| OnStart | Dizi aralığı başladığında tetiklenecek özel işlev. |
| OnInterval | Belirtilen süre içinde (saat başından sona kadar StartTime ile EndTime) her aralıkta tetiklenecek özel işlev. |
| OnEnd | Dizi aralığı sona erdiğinde tetiklenecek özel işlev. |
| SyncToAudio | Aralık süresini bir ses yapılandırması ile senkronize etme durumunu tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
|
İstemci Şeması
Schema.OnRun = function()
print("OnRun (İstemci)")
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
schedule
interval ile benzer, ancak aynı olay için birden fazla belirli başlangıç zamanları tanımlayabilirsiniz; bu sahne içinde iki kez havai fişek gösterisi planlamak gibi.
| Yapılandırma Anahtarı | Açıklama |
|---|---|
| StartTimes | Sahne süresine bağlı olarak başlangıç zamanlarının tablosu, saniye cinsinden. |
| OnStart | StartTimes tablosundaki her belirli zaman diliminde tetiklenecek özel işlev. |
| Skippable | Planlanmış etkinliğin geç kalan katılımcılar için atlanabilir olup olmadığını tanımlayan boolean. Eğer false olarak ayarlanırsa, katılma/arama zamanından önce planlanmış tüm etkinlik başlangıç zamanları o katılıma/arama zamanında gerçekleşecektir. true olarak ayarlanırsa, yalnızca katılma/arama sonrası planlanmış başlangıç zamanları gerçekleşir. Varsayılan false'dır. |
| SyncToAudio | Planlamayı bir ses yapılandırması ile senkronize etme durumunu tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
|
İstemci Şeması
Schema.OnRun = function()
print("OnRun (İstemci)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- Geçici kalp atışını başlat
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- Çerçeveye bağlantı bilgisini ver
Schema:inform(tempConnection)
end
})
end
inform
OnRun yaşam döngüsü kancasında oluşturulan herhangi bir modül, UI nesneleri, bağlantılar vb. hakkında çerçeveyi bilgilendirir, böylece bunların arama sırasında düzgün bir şekilde temizlenmesini sağlar. Kullanım durumları arasında:
Sahne süresince temizlenmesi gereken, RunService.Heartbeat gibi geçici bir bağlantıyı çerçeveye bildirmek.
Sunucu ŞemasıSchema.OnRun = function()print("OnRun (Sunucu)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Geçici kalp atışını başlatlocal tempConnection = RunService.Heartbeat:Connect(function()end)-- Çerçeveye bağlantı bilgisini verSchema:inform(tempConnection)end})endOnRun yaşam döngüsü kancasında bir bağlantı veya başka bir referansı başlatan bir ModuleScript içindeki özel "temizleme" işlevini çağırmak.
Sunucu Şeması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 (Sunucu)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Özel modül içinde "init" fonksiyonunu çağırıncustomModule.init()-- Sahne temizlendiğinde özel modül içindeki "clean" fonksiyonunu çağırınSchema:inform(customModule, customModule.clean)end,})endModuleScript - CustomModulelocal RunService = game:GetService("RunService")local CustomModule = {}CustomModule.init = function()-- Kalp atışı bağlantısını başlatCustomModule.connection = RunService.Heartbeat:Connect(function()end)endCustomModule.clean = function()-- Kalp atışı bağlantısını kes ve temizleif CustomModule.connection thenCustomModule.connection:Disconnect()CustomModule.connection = nilendendreturn CustomModule
Fonksiyonlar
loadScene
loadScene(sceneName: string, startTime: number ?)
Bir sahneyi sceneName ile programlı olarak yükler ve startTime'de başlatır. Sahne yüklendikten sonra sunucudan yüklenmesi için 5 saniyelik "hoş geldin süresi" olacaktır; bu süre içinde arama gerçekleşir ve sahne oynamaya başlar. Bu, eğer loadScene("[SahneAdı]", 20) çağrısını tam olarak 16:15:00'te yaparsanız, çerçeve, talep edilen 20 dakikaya ek olarak 5 saniye bekleyecek, sahneyi 16:15:25'te başlatacaktır.
Betiği
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Geçerli sahne sona erdiğinde yüklenecek bir sonraki sahneyi belirleyin
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "ÖnGösterim" then
-- "ÖnGösterim" sona erdi; konserin ilk sahnesini yükle
EventSequencer.loadScene("Parça1")
elseif endedSceneName == "Parça1" then
-- "Parça1" sona erdi; konserin ikinci sahnesini yükle
EventSequencer.loadScene("Parça2")
else
-- Ön gösterim sahnesine geri dön
EventSequencer.loadScene("ÖnGösterim")
end
end)
createSchema
createSchema(): table
Sahne için mantık oluşturmak üzere sahne şemasının bir örneğini döndürür.
İstemci Şeması
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
Schema.OnSetup = function(timePositionObject)
print("OnSetup (İstemci)")
end
seek
seek(time: number)
Yüklenmiş sahnenin başlangıcından time değerine, saniye cinsinden, arama yapar.
Betiğilocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))EventSequencer.seek(95.58)
setSceneWarningTime
setSceneWarningTime(endSceneTimeWindow: number)
Bir uyarının dağıtıldığı tüm sahnelerin sonu için kaç saniye kaldığını tanımlar. Uyarıyı ya istemci tarafında onSceneEndingWarningForClient veya sunucu tarafında onSceneEndingWarningForServer aracılığıyla algılayabilirsiniz.
Betiği
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Sahneyi yükle
EventSequencer.loadScene("GüzelSahne")
-- Sahne bitmeden 5 saniye önce uyarı zamanı ayarla
EventSequencer.setSceneWarningTime(5)
-- Sahnenin sona ermek üzere olduğunu algılama
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Sahne bitmek üzere!")
end)
setSeekingPermissions
setSeekingPermissions(permissions: table)
Etkinliğin PlaceId değerine, ayrıca belirli UserIds ve/veya gruplara ve bunlar içindeki rollerine dayanarak arama izni verir. Daha fazla bilgi için sahneleri ara ve geçiş yap bölümüne bakın.
getCurrentSceneEnvironment
getCurrentSceneEnvironment(): Folder (YIELDS)
İstemci veya sunucu tarafında şu anki sahnenin Çevre klasörünü döndürür; çağrıldığı yere göre İstemci veya Sunucu şema betiklerinden biri olabilir.
İstemci Şeması
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 (İstemci)")
-- Sahne ortamlarına erişim; Satır İçi Mod için geçerli değildir
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Mevcut zaman:", timePositionObject.Value)
end
Sunucu Şeması
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 (Sunucu)")
serverEnvironment = EventSequencer.getCurrentSceneEnvironment()
partColorConnection = changePartColorEvent.OnServerEvent:Connect(function(player, changedPart, newColor)
serverEnvironment.changedPart.Color = newColor
end)
end
getCurrentServerEnvironmentFromClient
getCurrentServerEnvironmentFromClient(): Folder (YIELDS)
İlgili sahnenin sunucu tarafı Çevre klasörünü döndürür. getCurrentSceneEnvironment'dan farklı olarak, bunu İstemci şema betiklerinden arayabilirsiniz.
İstemci Şeması
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 (İstemci)")
-- Sahne ortamlarına erişim; Satır İçi Mod için geçerli değildir
clientEnvironment = EventSequencer.getCurrentSceneEnvironment()
serverEnvironment = EventSequencer.getCurrentServerEnvironmentFromClient()
print("Mevcut zaman:", timePositionObject.Value)
end
isLoadingScene
isLoadingScene(): boolean
Bir sahnenin şu anda yüklenip yüklenmediğini anlamak için sunucudan çağrılır.
Betiğilocal ReplicatedStorage = game:GetService("ReplicatedStorage")local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))print(EventSequencer.isLoadingScene())while EventSequencer.isLoadingScene() dotask.wait()endprint("Sahne yüklendi")
Olaylar
onSceneEndingWarningForClient
Sahnenin sona ermek üzere olduğu zaman istemcide tetiklenir. Varsayılan süre 3 saniyedir, fakat bunu setSceneWarningTime aracılığıyla yapılandırabilirsiniz. Bu olay yalnızca bir LocalScript içinde bağlanabilir.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Sahne sona ermek üzere olduğunu algılama (istemci tarafında)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("Sahne bitmek üzere!")
end)
onSceneEndingWarningForServer
Sahnenin sona ermek üzere olduğu zaman sunucuda tetiklenir. Varsayılan süre 3 saniyedir, fakat bunu setSceneWarningTime aracılığıyla yapılandırabilirsiniz. Bu olay yalnızca bir Script içinde bağlanabilir.
Betiği
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Sahne sona ermek üzere olduğunu algılama (sunucu tarafında)
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Sahne bitmek üzere!")
end)
onSceneLoadedForClient
Sahne başladığında istemcide tetiklenir. Bu olay yalnızca bir LocalScript içinde bağlanabilir.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Sahne başladığında algılama (istemci tarafında)
EventSequencer.onSceneLoadedForClient:Connect(function()
warn("Sahne başlıyor!")
end)
onOrchestrationFinished
Bir sahne, zaman uzunluğuna ulaştığında ve etkili bir şekilde sona erdiğinde sunucuda tetiklenir. Bu olay, sona eren sahne için endedSceneName türünde bir dize adı argümanını alır, bu olayı takip ederek başka bir sahne yükleyebilirsiniz. Yalnızca bir Script içinde bağlanabilir.
Betiği
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Geçerli sahne sona erdiğinde yüklenecek bir sonraki sahneyi belirleyin
EventSequencer.onOrchestrationFinished:Connect(function(endedSceneName)
if endedSceneName == "ÖnGösterim" then
-- "ÖnGösterim" sona erdi; konserin ilk sahnesini yükle
EventSequencer.loadScene("Parça1")
elseif endedSceneName == "Parça1" then
-- "Parça1" sona erdi; konserin ikinci sahnesini yükle
EventSequencer.loadScene("Parça2")
else
-- Ön gösterim sahnesine geri dön
EventSequencer.loadScene("ÖnGösterim")
end
end)