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ı, 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:

  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 Kategoriler için 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. 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:

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

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

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

KapAçı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ğacakları parçaları içerir. Bu klasördeki her 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 buraya gitmesi önerilir.
TerrainSahne arazisini içerir.
AydınlatmaKü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.

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

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

    Betiği - 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:

    placeIDsAramanın destekleneceği PlaceId değerlerinin virgülle ayrılmış listesi.
    userIDsDesteklenen yerlerde arama yapabilecek kişilerin UserIds değerlerinin virgülle ayrılmış listesi.
    groupsHer 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:

  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 ayrıntılarını görmek için eklenti simgesine tıklayın ve ardından Yükle butonuna tıklayın.

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

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

  2. Sahne Yöneticisi eklenti penceresinde, istediğiniz sahne için Aydınlatmayı Kaydet'e tıklayın.

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

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

  2. Sahne Yöneticisi eklenti penceresinde, istediğiniz sahne için Arazileri Kaydet'e tıklayın.

  3. 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
StartTimeSesin sahnenin süresine bağlı olarak ne zaman çalması gerektiği, saniye cinsinden.
SoundIdÇalınacak sesin varlık kimliği.
OnStartSes çalmaya başladığında tetiklenecek özel işlev.
OnEndSes çaldıktan sona erdiğinde tetiklenecek özel işlev.
VolumeSound 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
StartTimeAnimasyonun sahne süresine bağlı olarak ne zaman çalınacağı, saniye cinsinden.
EndTimeAnimasyonun sahne süresine bağlı olarak 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 ne kadar sürede açılacağını, saniye cinsinden; varsayılan 0.2 (saniye).
FadeOutTimeAnimasyonun ne kadar sürede kapanacağını, saniye cinsinden; varsayılan 0.2 (saniye).
OnStartAnimasyon çalmaya başladığında tetiklenecek özel işlev.
OnEndAnimasyon çaldıktan sona erdiğinde tetiklenecek özel işlev.
LoopedAnimasyonun döngüde olup olmadığı; varsayılan false'dır.
SyncToAudioAnimasyonun bir ses yapılandırması ile senkronize olup olmayacağına dair tablo. Aşağıdaki anahtarları kabul eder:
  • Audio – Bir ses yapılandırmasına referans.
  • StartAtAudioTime – Animasyonun sesin süresine bağlı olarak ne zaman çalınacağı.
  • EndAtAudioTime – İsteğe bağlı olarak, animasyonun sesin süresine bağlı olarak ne zaman sona ereceği.
İ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
StartTimesSahne süresine bağlı olarak başlangıç zamanlarının tablosu, saniye cinsinden.
TweenTweed edilen nesneyi ve özellikleri tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
OnStartTween çalmaya başladığında tetiklenecek özel işlev.
OnHeartbeatHer Kalp Atışı'nda tetiklenecek özel işlev; ikinci parametre olarak tween alpha'sını alır.
OnEndTween tamamlandığında tetiklenecek özel işlev.
SyncToAudioTween'i bir ses yapılandırması ile 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ı belirten 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

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
StartTimeBelirtilen süre içinde aralığın başlangıcı, sahne süresine bağlı olarak, saniye cinsinden.
EndTimeBelirtilen süre içinde aralığın sonu, sahne süresine bağlı olarak, saniye cinsinden.
FrequencyOnInterval işlevinin ne sıklıkta tetikleneceği, saniye cinsinden; ilk çalıştırma StartTime'da gerçekleşmektedir.
OnStartDizi aralığı başladığında tetiklenecek özel işlev.
OnIntervalBelirtilen süre içinde (saat başından sona kadar StartTime ile EndTime) her aralıkta tetiklenecek özel işlev.
OnEndDizi aralığı sona erdiğinde tetiklenecek özel işlev.
SyncToAudioAralık süresini bir ses yapılandırması ile senkronize etme durumunu tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
  • Audio – Ses yapılandırmasına referans.
  • StartAtAudioTime – Sesin süresine göre aralık süresinin başlangıcı.
  • EndAtAudioTime – İsteğe bağlı olarak, sesin süresine bağlı olarak aralık süresinin sonu.
İ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
StartTimesSahne süresine bağlı olarak başlangıç zamanlarının tablosu, saniye cinsinden.
OnStartStartTimes tablosundaki her belirli zaman diliminde tetiklenecek özel işlev.
SkippablePlanlanmış 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.
SyncToAudioPlanlamayı bir ses yapılandırması ile senkronize etme durumunu tanımlayan tablo. Aşağıdaki anahtarları kabul eder:
  • Audio – Bir ses yapılandırmasına referans.
  • StartAtAudioTimes – Sesin süresine göre OnStart işlevinin ne zaman tetikleneceğini belirten 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ışı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şlat
    local tempConnection = RunService.Heartbeat:Connect(function()
    end)
    -- Çerçeveye bağlantı bilgisini ver
    Schema:inform(tempConnection)
    end
    })
    end
  • OnRun 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ın
    customModule.init()
    -- Sahne temizlendiğinde özel modül içindeki "clean" fonksiyonunu çağırın
    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 ?)

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ği

local 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ği

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

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