Olay Sıralayıcı

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

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:

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

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

  3. Paketler kutusunu bulun ve tıklayın.

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

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

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

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

  1. Olay Sıralayıcı klasörünü genişletin ve BoşSahne klasörünü bulun.

  2. 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
İstemciHerhangi 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ğumYerleriKullanı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.
SunucuBir 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.
TerrainSahne arazisini içerir.
AydınlatmaKü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.

  1. ServerScriptService içinde yeni bir Script oluşturun.

  2. Yeni betiğe aşağıdaki kodu yapıştırın.

    Script - Arama İzinlerini Ayarla
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local EventSequencer = require(ReplicatedStorage:WaitForChild("EventSequencer"))
    EventSequencer.setSeekingPermissions({
    placeIDs = {},
    userIDs = {},
    groups = {
    {GroupID = , MinimumRankID = },
    }
    })
  3. Aşağıdaki tabloları setSeekingPermissions çağrısında aşağıdaki gibi doldurun:

    placeIDsArama yapılacak PlaceId değerlerinin virgülle ayrılmış listesi.
    userIDsDesteklenen yerlerde arama yapabilecek kullanıcıların UserIds değerlerinin virgülle ayrılmış listesi.
    groupsHer 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:

  1. Studio'nun Pencere menüsünden veya Ana Sayfa sekmesi araç çubuğundan Araç Kutusu 'nu açın.

  2. Yaratıcı Mağaza sekmesi seçili iken, açılır menüden Eklentiler'i seçin.

  3. Arama alanına Sahne Yöneticisi yazın ve eklentiyi bulmak için Enter tuşuna basın.

  4. Eklentinin simgesine tıklayarak ayrıntılarını görüntüleyin ve ardından Yükle butonuna tıklayın.

  5. 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 eylemiAçıklama
İstemciyi YükleEğ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ükleEğ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şaltEğ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şaltEğ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şaltYü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.

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

  2. Sahne Yöneticisi eklenti penceresinde, istenen sahne için Aydınlatmayı Kaydet butonuna tıklayın.

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

  1. Sahnenin arazisini en üst düzey Terrain servisi aracılığıyla yapılandırın.

  2. Sahne Yöneticisi eklenti penceresinde, istenen sahne için Arazileri Kaydet butonuna tıklayın.

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

İ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, 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.

İ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 için yararlıdır; örneğin, OnSetup veya OnRun içinde oluşturulan bağlantıları kesmek gibi.

Sunucu Şeması
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
StartTimeSahne süresine göre sesin çalınacağı zaman, saniye cinsinden.
SoundIdÇalınacak sesin varlık kimliği.
OnStartSes çalmaya başladığında tetiklenecek özel işlev.
OnEndSes çalmayı bitirdiğinde tetiklenecek özel işlev.
VolumeSound nesnesinin ses seviyesi; 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

animasyon

Belirli bir zamanda çalınan bir Animation oluşturur.

Yapılandırma AnahtarıAçıklama
StartTimeSahne süresine göre animasyonun çalınacağı zaman, saniye cinsinden.
EndTimeAnimasyonun sahne süresine göre sona ereceği isteğe bağlı zaman, saniye cinsinden.
RigAnimasyonun çalınacağı animasyon rig'i.
AnimationIdÇalınacak animasyonun varlık kimliği.
SpeedAnimasyonun oynatma hızı; varsayılan 1'dir.
FadeInTimeAnimasyonun içeri girmesi için geçen süre, saniye cinsinden; varsayılan 0.2 (saniye).
FadeOutTimeAnimasyonun dışarı çıkması için geçen süre, saniye cinsinden; varsayılan 0.2 (saniye).
OnStartAnimasyon çalmaya başladığında tetiklenecek özel işlev.
OnEndAnimasyon çalmayı bitirdiğinde tetiklenecek özel işlev.
LoopedAnimasyonun döngüye girip girmeyeceği; varsayılan false'dır.
SyncToAudioAnimasyonu bir ses yapılandırmasıyla senkronize etme durumunu tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
  • Audio – Bir ses yapılandırmasına referans.
  • StartAtAudioTime – Animasyonun sesin süresine göre ne zaman çalınacağı.
  • EndAtAudioTime – Animasyonun sesin süresine göre sona ereceği isteğe bağlı zaman.
İ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

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
StartTimesSahne süresine göre başlangıç zamanlarının tablosu, saniye cinsinden.
TweenTween'lenmesi gereken nesne ve özellikleri tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
OnStartTween çalmaya başladığında tetiklenecek özel işlev.
OnHeartbeatHer Heartbeat'te tetiklenecek özel işlev; ikinci parametre olarak tween alpha'sını alır.
OnEndTween çalmayı bitirdiğinde tetiklenecek özel işlev.
SyncToAudioBir ses yapılandırmasıyla tween'i senkronize etme durumunu tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
  • Audio – Bir ses yapılandırmasına referans.
  • StartAtAudioTimes – Tween'in sesin süresine göre ne zaman çalınacağını tanımlayan başlangıç zamanları tablosu.
İ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

aralı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
StartTimeAralık süresinin başlangıcı, sahne süresine göre, saniye cinsinden.
EndTimeAralık süresinin sonu, sahne süresine göre, saniye cinsinden.
FrequencyOnInterval işlevinin ne sıklıkta tetikleneceği, saniye cinsinden; ilk yürütme StartTime'da gerçekleşir.
OnStartAralık serisinin başladığında tetiklenecek özel işlev.
OnIntervalBelirtilen süre içinde (StartTime ile EndTime arasında) her aralıkta tetiklenecek özel işlev.
OnEndAralık serisi sona erdiğinde tetiklenecek özel işlev.
SyncToAudioBir ses yapılandırmasıyla aralık süresini senkronize etme durumunu tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
  • Audio – Bir ses yapılandırmasına referans.
  • StartAtAudioTime – Aralık süresinin sesin süresine göre ne zaman başlayacağı.
  • EndAtAudioTime – Aralık süresinin sesin süresine göre sona ereceği isteğe bağlı zaman.
İ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

planla

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
StartTimesSahne süresine göre başlangıç zamanlarının tablosu, saniye cinsinden.
OnStartStartTimes tablosundaki her belirli zamanda tetiklenecek özel işlev.
SkippablePlanlanan 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.
SyncToAudioPlanlamayı bir ses yapılandırmasıyla senkronize etme durumunu tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
  • Audio – Bir ses yapılandırmasına referans.
  • StartAtAudioTimesOnStart işlevinin sesin süresine göre ne zaman tetikleneceğini tanımlayan başlangıç zamanları tablosu.
İstemci Şeması
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
})
end

bilgilendir

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şlat
    local tempConnection = RunService.Heartbeat:Connect(function()
    end)
    -- Bağlantıyı çerçeveye bildirin
    Schema:inform(tempConnection)
    end
    })
    end
  • OnRun 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ğır
    customModule.init()
    -- Sahne temizliği sırasında özel modülde "clean" işlevini çağır
    Schema:inform(customModule, customModule.clean)
    end,
    })
    end
    ModuleScript - CustomModule
    local RunService = game:GetService("RunService")
    local CustomModule = {}
    CustomModule.init = function()
    -- Kalp atışı bağlantısını başlat
    CustomModule.connection = RunService.Heartbeat:Connect(function()
    end)
    end
    CustomModule.clean = function()
    -- Kalp atışı bağlantısını kes ve temizle
    if CustomModule.connection then
    CustomModule.connection:Disconnect()
    CustomModule.connection = nil
    end
    end
    return 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.

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

İ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üklü sahnenin başlangıcından itibaren time değerine, saniye cinsinden, arama yapar.

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

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

İ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 (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.

İ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 bilmek için sunucudan çağrılır.

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

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

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

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

Script
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)
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.