Olay Sıralayıcı (EventSequencer), yapılandırılmış bir eylem ve tetikleyici dizisi üzerinde canlı, sunucular arası olaylar ve kesitler oluşturmanıza olanak tanıyan güçlü bir çerçevedir. Daha spesifik olarak, bu modül size şunları yapma imkanı sağlar:
- Ses, animasyonlar ve tween'lerin planlı yapılandırmaları aracılığıyla yapılandırılmış bir çerçevede bir olay veya kesit oluşturun.
- Birden fazla sunucu arasında birden fazla sahneye geçiş yapın, karmaşık animasyonları ve görselleri bir zaman çizelgesine senkronize edin.
- Bir olayı arayın ve test ve geliştirme amaçları için oyunu önizleyin.
Bu çerçeve, Twenty One Pilots ve 24kGoldn konserleri gibi Roblox etkinliklerinde test edilmiştir ve birçok yüksek ziyaretçi alan oyunda kullanılmıştır.
Olay Sıralayıcı'yı düzenlenebilir bir yerde görmek için, Roblox Studio'daki Konser şablonuna göz atın. Bu şablon, geliştiricilerin etkinlikler/konserler oluşturması ve çeşitli özellikler ve bileşenlerle tanışması için kapsamlı bir başlangıç noktasıdır.

Modül kullanımı
Kurulum
Olay Sıralayıcı çerçevesini bir oyunda 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 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.

Keşfedicinin penceresinde, tüm Olay Sıralayıcı modelini ServerScriptService içine taşıyın. Oyun çalıştırıldığında modül çalışmaya başlayacaktır.
Çerçeve modları
Değiştirme modu
Varsayılan çerçeve modu değiştirme modudur; bu modda, sahne yerleştirerek benzersiz sahne, terrain, aydınlatma özellikleri, çevresel etkiler ve kullanıcı arayüzü nesneleri oluşturursunuz. Bir sahne yüklendiğinde, bu nesneler ve özellikler Workspace, Terrain ve Lighting içine dağıtılır, mevcut nesneleri/özellikleri değiştirerek klonlanmış bir alan oluşturur.
Satır içi modu
Alternatif bir çerçeve modu satır içi modudur; bu modda, akışları/olayları için betik mantığı ile benzersiz sahne tasarlarsınız, ancak çerçeve, bir sahnenin Çevre klasöründen varlıkları/özellikleri klonlamak için mevcut 3D nesneleri, terrain, aydınlatma özellikleri, çevresel etkiler ve kullanıcı arayüzü nesnelerini silmez.
Satır içi modunu etkinleştirmek için:
ServerScriptService içine yerleştirdiğiniz Olay Sıralayıcı modelinin içine girin ve ReplicatedStorage klasörü içindeki Satır İçi değerini seçin.

Özellikler penceresinde, Değer onay kutusunu açın.

Sahne oluşturma
Bir sahne, esasen bir etkinliğin veya kesitin bir parçasıdır ve bir dizi klasör içinde sarılmıştır. Her sahne, akışını/olaylarını tanımlayan betik mantığı içerir ve bir sahne kendi 3D nesnelerini, terrain, aydınlatma özelliklerini, çevresel etkileri ve kullanıcı arayüzü nesnelerini depolayabilir.
Hızlı bir başlangıç yapmak 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 içine taşıyın veya kopyalayın.

Zaman uzunluğu
Her sahnenin, süresini tanımlayan bir zaman uzunluğu olmalıdır; tıpkı bir filmin veya konserin belirli bir süresi olduğu gibi. Zaman uzunluğu, sahne klasöründe ZamanUzunluğu adında bir sayısal özellik olarak tanımlanır ve bunu doğrudan Studio'da veya programlı olarak Instance:SetAttribute() aracılığıyla ayarlayabilirsiniz.


Çevre
Bir sahnenin Çevre klasörü, kullanıcıların gördüğü ve duyduğu her şeyi içerir; bunlar arasında 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 içine dağıtılır, mevcut nesneleri/özellikleri değiştirerek klonlanmış bir alan oluşturur.
Çevre klasörü aşağıdaki kapsayıcıları içerir:
| Kapsayıcı | 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ğduğu parçaları içerir. Bu klasördeki herhangi bir 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 burada olması önerilir. |
| Terrain | Sahne arazisini içerir. |
| Aydınlatma | Küresel aydınlatma özellikleri olarak özellikler içerir; ayrıca atmosferik etkiler ve son işlem etkileri gibi değiştiriciler 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öre bir şey yerleştirmek zorunlu değildir.
İstemci
Bu betik, istemcide şema mantığını yürütür.
Sunucu
Bu betik, sunucuda şema mantığını yürütür.
Sahne şemaları
Bir sahnenin şeması, sahnenin zaman çizelgesinde ne zaman ne olacağını tanımlar. Bir sahnenin şemasını hem İstemci hem de Sunucu modüllerinde tanımlamalı ve yaşam döngüsü kancaları eklemelisiniz.
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. Üretimdeki bir sahne genellikle en basit akışta çalışır:
OnRun, arama sırasında kesintiye uğrayabilir:
Üç kanca da sahne tekrar oynatıldığında tekrar edebilir:
Yapılandırmalar
Şema yapılandırmaları, bir sahnenin temel işlemlerini tanımlar; örneğin, 00:32'de ses çalmak, o sesle senkronize olacak bir animasyonu sıraya almak, bir sahne olayı planlamak gibi havai fişek gösterisi ve daha fazlası. Her yapılandırma, ilk parametre (self) yapılandırma örneğidir.
Sahne arama
Olay Sıralayıcı'nın benzersiz bir özelliği, sahneler arasında "arama" yapabilme yeteneğidir; bu, bir videoda arama yapmaya benzer. Değiştirme Modu içinde, sahneler arasında geçiş yaparak, birden fazla sahneden oluşan bir etkinliği üretime geçmeden önce önizleyebilirsiniz.
Sahne arama, herkesin erişimine açık değildir; çünkü etkinliği sadece keyifle izleyen kullanıcıların zaman akışını kontrol etme yetkisi olmamalıdır. Bunun yerine, arama iznini etkinliğin PlaceId ve belirli UserIds ve/veya gruplar ve içlerindeki rollerine göre vermeniz gerekir.
ServerScriptService içinde yeni bir Script oluşturun.
Yeni betiğe aşağıdaki kodu yapıştırın.
Script - 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 Arama yapılacak PlaceId değerlerinin virgülle ayrılmış listesi. userIDs Desteklenen yerlerde arama yapabilecek kullanıcıların UserIds değerlerinin virgülle ayrılmış listesi. groups Her biri bir grup kimliği ve desteklenen yerlerde arama yapabilecek o grubun üyelerinin minimum 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 ile ilgili yararlı bir araçtır. Satır İçi Mod kullanmıyorsanız, sahne nesnelerini ve özelliklerini manuel olarak yerleştirmek/düzenlemek yerine bu eklentiyi kullanmanız şiddetle önerilir.
Eklentiyi kurmak 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 simgesine tıklayarak ayrıntılarını görüntüleyin ve ardından Yükle butonuna tıklayın.
Eklenti yüklendikten sonra, Studio'nun Eklentiler sekmesinde görünür.
Sahne yükleme ve boşaltma
Sahne oluşturma bölümünde belirtildiği gibi, bir sahnenin Çevre klasörü, kullanıcıların gördüğü ve duyduğu her şeyi içerir; bunlar arasında 3D nesneler bulunur. Eklenti, bir sahnenin varlıklarını çalışma alanındaki düzenli klasörlere hızlı bir şekilde yüklemenize veya boşaltmanıza yardımcı olur.
| Eklenti eylemi | Açıklama |
|---|---|
| İstemciyi Yükle | Eğer sahnenin istemci içeriği boşaltılmışsa, Çevre/İstemci klasörünü Çalışma Alanı/Sahnelerİstemci klasörüne taşır. |
| Sunucuyu Yükle | Eğer sahnenin sunucu içeriği boşaltılmışsa, Çevre/Sunucu klasörünü Çalışma Alanı/SahnelerSunucu 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ı/Sahnelerİ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ı/SahnelerSunucu'dan [Sahne]/Çevre klasörüne geri taşır. |
| Tüm Sahneleri Boşalt | Yüklenmiş her sahnenin İstemci ve Sunucu klasörlerini Çevre klasörüne geri 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. Bu, en üst düzey bir hizmet 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, son işlem efektlerini, atmosferik etkileri ve gökyüzü kutularını en üst düzey Lighting servisi aracılığıyla yapılandırın.

Sahne Yöneticisi eklenti penceresinde, istenen sahne için Aydınlatmayı Kaydet butonuna tıklayın.
O sahnenin Çevre/Aydınlatma yapılandırmasını seçin ve genişletin; klasörün özellikleri olarak aynı aydınlatma özelliklerini ve en üst düzey Lighting servisinin klonlanmış çocuklarını göreceksiniz.

Klonlanmış örnekler 
Kayıtlı özellikler Aydınlatma özellikleri ve çocukları bir sahne için kaydedildikten sonra, bunları hızlı bir şekilde en üst düzey Lighting servisine geri yükleyebilirsiniz; eklenti penceresinden Aydınlatmayı Yükle butonuna tıklayarak.
Araziyi kaydetme ve yükleme
Terrain, Workspace içinde en üst düzey bir sınıf olduğundan, oluşturulan veya şekillendirilmiş arazileri 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.
Sahnenin arazisini en üst düzey Terrain servisi aracılığıyla yapılandırın.

Sahne Yöneticisi eklenti penceresinde, istenen sahne için Arazileri Kaydet butonuna tıklayın.
O sahnenin Çevre/Terrain klasörünü seçin ve genişletin; kaydedilen arazinin temsilcisi olan bir TerrainRegion nesnesini göreceksiniz.

Bir sahne için arazi kaydedildikten sonra, bunu hızlı bir şekilde en üst düzey Terrain servisine geri yükleyebilirsiniz; eklenti penceresinden Arazileri Yükle butonuna tıklayarak.
API referansı
Şema yaşam döngüsü kancaları
OnSetup
OnSetup yaşam döngüsü kancası, OnRun veya OnEndScene içinde referans alınacak varlıkları ve değişkenleri başlatmak için tasarlanmıştır; sahnenin süresi boyunca kalması amaçlanan bağlantılar kurmak vb. Bu kanca, kurulumda mevcut zamanı okumanıza olanak tanıyan timePositionObject parametresini alır.
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)
endlocal 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)
endOnRun
OnRun, bir şema içindeki ana operasyonel yaşam döngüsü kancasıdır. Sahne için tüm zamanlı yapılandırmaları içermelidir; ses çalmaktan veya bir animasyondan etkinlik planlamaya kadar.
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
})
endOnEndScene
OnEndScene yaşam döngüsü kancası, sahnede kalan her şeyi temizlemek için yararlıdır; örneğin, OnSetup veya OnRun içinde oluşturulan bağlantıları kesmek gibi.
Schema.OnEndScene = function()
print("OnEndScene (Sunucu)")
if partColorConnection then
partColorConnection:Disconnect()
partColorConnection = nil
end
endŞema yapılandırmaları
ses
Belirli bir zamanda çalınan bir Sound nesnesi oluşturur. Ses, sahne sona erdikten sonra veya Sound nesnesi çalmayı bitirdikten sonra silinir.
| Yapılandırma Anahtarı | Açıklama |
|---|---|
| StartTime | Sahne süresine göre sesin çalınacağı zaman, saniye cinsinden. |
| SoundId | Çalınacak sesin varlık kimliği. |
| OnStart | Ses çalmaya başladığında tetiklenecek özel işlev. |
| OnEnd | Ses çalmayı bitirdiğinde tetiklenecek özel işlev. |
| Volume | Sound nesnesinin ses seviyesi; varsayılan 0.5'tir. |
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
})
endanimasyon
Belirli bir zamanda çalınan bir Animation oluşturur.
| Yapılandırma Anahtarı | Açıklama |
|---|---|
| StartTime | Sahne süresine göre animasyonun çalınacağı zaman, saniye cinsinden. |
| EndTime | Animasyonun sahne süresine göre 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 içeri girmesi için geçen süre, saniye cinsinden; varsayılan 0.2 (saniye). |
| FadeOutTime | Animasyonun dışarı çıkması için geçen süre, saniye cinsinden; varsayılan 0.2 (saniye). |
| OnStart | Animasyon çalmaya başladığında tetiklenecek özel işlev. |
| OnEnd | Animasyon çalmayı bitirdiğinde tetiklenecek özel işlev. |
| Looped | Animasyonun döngüye girip girmeyeceği; varsayılan false'dır. |
| SyncToAudio | Animasyonu bir ses yapılandırmasıyla senkronize etme durumunu tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
|
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
})
endtween
Arama ve dinamik katılım sırasında korunabilen yapılandırılabilir bir Tween oluşturur; bu, zaman içinde ayrı noktalarda tween'leri zincirlemenizi sağlar ve her şey beklenildiği gibi çalınır ve senkronize edilir.
| Yapılandırma Anahtarı | Açıklama |
|---|---|
| StartTimes | Sahne süresine göre başlangıç zamanlarının tablosu, saniye cinsinden. |
| Tween | Tween'lenmesi gereken nesne ve özellikleri tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
|
| OnStart | Tween çalmaya başladığında tetiklenecek özel işlev. |
| OnHeartbeat | Her Heartbeat'te tetiklenecek özel işlev; ikinci parametre olarak tween alpha'sını alır. |
| OnEnd | Tween çalmayı bitirdiğinde tetiklenecek özel işlev. |
| SyncToAudio | Bir ses yapılandırmasıyla tween'i senkronize etme durumunu tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
|
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,
})
endaralık
Belirli bir süre boyunca belirli bir sıklıkta, saniye cinsinden, özel bir geri çağırma işlevini yürütür. Yanıp sönen ışıklar, bir sesin yoğunluğunu artırmak gibi tekrarlayan olaylar için yararlıdır. En düşük olası sıklık 0 saniyedir, ancak teknik olarak minimum sıklık her zaman Heartbeat'e sıkıştırılır.
| Yapılandırma Anahtarı | Açıklama |
|---|---|
| StartTime | Aralık süresinin başlangıcı, sahne süresine göre, saniye cinsinden. |
| EndTime | Aralık süresinin sonu, sahne süresine göre, saniye cinsinden. |
| Frequency | OnInterval işlevinin ne sıklıkta tetikleneceği, saniye cinsinden; ilk yürütme StartTime'da gerçekleşir. |
| OnStart | Aralık serisinin başladığında tetiklenecek özel işlev. |
| OnInterval | Belirtilen süre içinde (StartTime ile EndTime arasında) her aralıkta tetiklenecek özel işlev. |
| OnEnd | Aralık serisi sona erdiğinde tetiklenecek özel işlev. |
| SyncToAudio | Bir ses yapılandırmasıyla aralık süresini senkronize etme durumunu tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
|
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,
})
endplanla
Aralık ile benzer, ancak aynı etkinlik için birden fazla belirli başlangıç zamanı tanımlayabilirsiniz; örneğin, bir sahnede havai fişek gösterisini iki kez planlamak gibi.
| Yapılandırma Anahtarı | Açıklama |
|---|---|
| StartTimes | Sahne süresine göre başlangıç zamanlarının tablosu, saniye cinsinden. |
| OnStart | StartTimes tablosundaki her belirli zamanda tetiklenecek özel işlev. |
| Skippable | Planlanan etkinliğin geç kalan kullanıcılar için veya planlanan başlangıç zamanının önünde arama yapıldığında atlanıp atlanamayacağını tanımlayan boolean. false olarak ayarlandığında, katılma/arama zamanından önce planlanan tüm etkinlik başlangıç zamanları o katılma/arama zamanında gerçekleşir. true olarak ayarlandığında, yalnızca katılma/arama zamanından sonra planlanan başlangıç zamanları gerçekleşir. Varsayılan false'dır. |
| SyncToAudio | Planlamayı bir ses yapılandırmasıyla senkronize etme durumunu tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
|
Schema.OnRun = function()
print("OnRun (İstemci)")
Schema:schedule({
StartTimes = {5, 27.25},
OnStart = function(self)
-- Geçici kalp atışı bağlantısını başlat
local tempConnection = RunService.Heartbeat:Connect(function()
end)
-- Bağlantıyı çerçeveye bildirin
Schema:inform(tempConnection)
end
})
endbilgilendir
OnRun yaşam döngüsü kancasında oluşturulan herhangi bir modül, UI nesnesi, bağlantı vb. hakkında çerçeveye bilgi verir; bu, arama sırasında düzgün bir şekilde temizlenmelerini sağlar. Kullanım durumları şunları içerir:
RunService.Heartbeat gibi geçici bir bağlantıyı çerçeveye bildirmek, böylece bağlantının sahnenin süresinin daha önceki bir noktasına arama yapıldığında temizlenmesini sağlamak.
Sunucu ŞemasıSchema.OnRun = function()print("OnRun (Sunucu)")Schema:schedule({StartTimes = {5},OnStart = function(self)-- Geçici kalp atışı bağlantısını başlatlocal tempConnection = RunService.Heartbeat:Connect(function()end)-- Bağlantıyı çerçeveye bildirinSchema:inform(tempConnection)end})endOnRun yaşam döngüsü kancasında bir bağlantı veya diğer referans başlatan bir ModuleScript içinde özel bir "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ülde "init" işlevini çağırcustomModule.init()-- Sahne temizliği sırasında özel modülde "clean" işlevini çağırSchema: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 ?)
Programlı olarak bir sahneyi sceneName ile yükler ve başlangıç zamanında startTime'dan başlatır. Sunucudan sahnenin yüklenmesi için 5 saniyelik bir "müsaade süresi" olacaktır; bu, eğer loadScene("[SahneAdı]", 20) çağrısını tam olarak 16:15:00'te yaparsanız, çerçeve 20 saniyelik istenen süreye ek olarak 5 saniye bekleyecek ve sahneyi 16:15:25'te başlatacaktır.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Mevcut 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 bir sahne şeması örneği döndürür.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
local Schema = EventSequencer.createSchema()
Schema.OnSetup = function(timePositionObject)
print("OnSetup (İstemci)")
endseek
seek(time: number)
Yüklü sahnenin başlangıcından itibaren time değerine, saniye cinsinden, arama yapar.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
EventSequencer.seek(95.58)setSceneWarningTime
setSceneWarningTime(endSceneTimeWindow: number)
Bir uyarının gönderileceği tüm sahnelerin sonundan itibaren geçen süreyi ayarlar. Uyarıyı, istemci tarafında onSceneEndingWarningForClient veya sunucu tarafında onSceneEndingWarningForServer aracılığıyla tespit edebilirsiniz.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Sahneyi yükle
EventSequencer.loadScene("GüzelSahne")
-- Sahne sona ermeden 5 saniye önce uyarı süresini ayarla
EventSequencer.setSceneWarningTime(5)
-- Sahne sona ermek üzereyken tespit et
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Sahne sona ermek üzere!")
end)setSeekingPermissions
setSeekingPermissions(permissions: table)
Etkinliğin PlaceId ve belirli UserIds ve/veya gruplar ve içlerindeki rollerine göre arama izni verir. Daha fazla bilgi için sahne arama ve geçiş bölümüne bakın.
getCurrentSceneEnvironment
getCurrentSceneEnvironment(): Folder (YIELD)
İstemci tarafında veya sunucu tarafında, çağrıldığı yere bağlı olarak mevcut sahnenin Çevre klasörünü döndürür.
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)
endlocal 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)
endgetCurrentServerEnvironmentFromClient
getCurrentServerEnvironmentFromClient(): Folder (YIELD)
Mevcut sahnenin sunucu tarafındaki Çevre klasörünü döndürür. getCurrentSceneEnvironment ile karşılaştırıldığında, bunu İstemci şema betiğinden çağırabilirsiniz.
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)
endisLoadingScene
isLoadingScene(): boolean
Bir sahnenin şu anda yüklenip yüklenmediğini bilmek için sunucudan çağrılır.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
print(EventSequencer.isLoadingScene())
while EventSequencer.isLoadingScene() do
task.wait()
end
print("Sahne yüklendi")Olaylar
onSceneEndingWarningForClient
Sahne sona ermeden önce istemcide tetiklenir. Varsayılan süre 3 saniyedir, ancak bunu setSceneWarningTime aracılığıyla yapılandırabilirsiniz. Bu olay yalnızca bir LocalScript içinde bağlanabilir.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Sahne sona ermek üzereyken tespit et (istemci tarafında)
EventSequencer.onSceneEndingWarningForClient:Connect(function()
warn("Sahne sona ermek üzere!")
end)onSceneEndingWarningForServer
Sahne sona ermeden önce sunucuda tetiklenir. Varsayılan süre 3 saniyedir, ancak bunu setSceneWarningTime aracılığıyla yapılandırabilirsiniz. Bu olay yalnızca bir Script içinde bağlanabilir.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Sahne sona ermek üzereyken tespit et (sunucu tarafında)
EventSequencer.onSceneEndingWarningForServer:Connect(function()
warn("Sahne sona ermek üzere!")
end)onSceneLoadedForClient
Sahne başladığında istemcide tetiklenir. Bu olay yalnızca bir LocalScript içinde bağlanabilir.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Sahne başladığında tespit et (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 sahnenin adını içeren bir endedSceneName dize argümanı alır ve bu olaydan sonra koşullu olarak başka bir sahne yükleyebilirsiniz. Yalnızca bir Script içinde bağlanabilir.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
-- Mevcut 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)