In-experience instantreaming Roblox motorunun 3D içeriği ve ilgili istanları dünyanın bölgelerinde dinamik olarak yükleme ve yüklemeyi sağlar. Bu, oyuncu deneyimini birkaç yön açısından iyileştirebilir, örneğin:
- Daha hızlı katılma zamanları — Oyuncular dünyanın diğer bölgeleri yüklenirken dünyanın diğer bölgelerinde oynayabilir.
- Hafıza verimliliği — Deneyimler, içerik dinamik olarak yeniden oynatıldığından daha az hafıza alanı olan cihazlarda oynanabilir. Daha immersive ve ayrıntılı dünyalar daha geniş bir yelpazede oynanabilir.
- Gelişmiş performans — Dünya ve oyuncuların içindeki değişiklikleri yüksek kare hızıyla senkronize eden daha iyi kare hızı ve sözleşme imzalama, sunucu daha az zaman harcayarak daha fazla performans elde eder. Klientler, oyun içindeki güncellemeyi gerektirmeyen istemleri güncellemez.
- Ayrıntı seviyesi — Uzaktaki modeller ve arazi, klientlerle yayınlanmayan durumda bile görünür kalır, deneyimi tamamen özelleştirerek arka plan görüntülerini hiç kurban etmeden optimize eder.
Yayınlanma'yı Etkileşimli Hale Getirme
İン스턴스 akışı, StreamingEnabled özelliği ile Studio'daki Çalışma Alanı nesnesinin Yeni Oluşturulan Yerler bölümünde etkinleştirilir. Bu özellik bir skriptte ayarlanmaz. Çalışma alanı, Studio'da yeni oluşturulan yerler için varsayılan olarak akışı etkinleştirir.
Etkinleştirildiğinde, aşağıdaki pratiklere uyulması önerilir:
- Çünkü müşteriler genellikle tüm Workspace yerel olarak mevcut olmayacaksa, uygun araç/API'yi kullanarak istemeleri LocalScript içinde mevcut olup olmadığından emin olun. Örneğin, per-model streaming kontrolleri
- 3D içeriklerinin Workspace dışındaki yerini azaltın. İçerikler, ReplicatedStorage veya ReplicatedFirst gibi konteynerlerde bulunur ve yayınlanmayı kullanıyor olabilirler.
- Oyuncunun ReplicationFocus 'ini sadece deneyimlerdeki gibi benzersiz durumlarda, Player.Character kontrol ettiği nesnelerin yakınında ayarla. Bu durumlarda, oyuncunun içeriğini yeniden akışlandırmak için içeriği yeniden akışlandırmak için içeriği yeniden ak
Teknik Davranış
Yayınlanıyor
Varsayılan olarak, bir oyuncu bir deneyime katılırken, Workspace 'deki instanslar kliyente replike edilir, dışında takip edilendışarılayın:
- Yukarıdaki instansların soyundan
- İnstansların kopyalanması
Daha sonra, oynanışsırasında, sunucu gerekli istanzları gerektiğinde kliğe yayınlayabilir.
Model Davranışı
Model standart davranış olmayan davranış ile ayarlanmış gibi Atomic stream içinde özel kurallar altında özel olarak gönderilir. Ancak, varsayılan (non-átom) modeller 5>ModelStreamingBehaviour5> ile 8>Varsayılan8> ( 1>Mirroring1> ) veya 4>Geliş
ModelStreamingBehavior Varsayılan / Miras Container'ında 1>Class.Model1> konsantratörü ve 4>Class.Script|Scripts4> gibi çalışmayan çalışmayan çalışmayan çalışmayan çalışmay
Yayınlandığından
oynanışsırasında, bir istemci şu anda oyuncubölgeleri yayınlayabilir (Workspace ) ve içinde bulunan BaseParts ile ilgili davranışı belirlemek için
Bir instans çıktığında, nil olarak ebeveyn olur, böylece var olan Luau durumu yeniden bağlanır. sonuçolarak, ChildRemoved
Akışın dışarı çıkmasını daha da öngörmek için, bu senaryolardan inceleyin:
Senaryo | Örnek | Yayınlanma Davranışı |
---|---|---|
Bir parça yerel olarak Class.Instance.new() ile bir Instance.new() içinde LocalScript. | Bir " bayrak ele geçirme" oyununda, tüm oyuncuları blue team'in üzerindeki bir LocalScript aracılığıyla mavi helikopter parçaları oluşturur ve eklersiniz. | Parça, sunucuya kopyalanmaz ve sunucudan yayınlanmaz aşağıdakiler hariç bir parçanın bir yokoluşudur, bir parçanın bir oyuncu karakter modelindeki bir soyundan oluşturulmuş olması gibi. |
Bir parça klonlanır yerel olarak ReplicatedStorage üzerinden Instance:Clone() ile bir 1> Class.LocalScript1> içinde. | Bir büyücü karakteri bir büyü yapar, böylece Tool üzerinde bir nesne, birkaç özel efekt içeren bir nesne kopyalanır ve wizard'ın pozisyonundaki alanın etrafında ebeveyn olur. | Parça sunucuya kopyalanmaz ve sunucudaki bir parçanın yokluğu için yayınlanmaz a menos que bunu bir sunucudaki bir parçanın yokluğu için yapmazsınız. |
Bir parça repareted ReplicatedStorage ile çalışma alanına bir LocalScript aracılığıyla bağlanır. | Bir "büyücünün şapkası" ReplicatedStorage 'de saklanır. Bir oyuncu wizard takımında oynamaya seçtiğinde, şapka LocalScript aracılığıyla karakter modeline hareket eder. | Parça, sunucudan geldiğinden beri yayınlanmaya devam ediyor çünkü server'dan geldi ve ReplicatedStorage 'a kopyalanıyor. Bu patronu, klient ve sunucu arasında bir desync'e neden olur ve parça yayınlanabilir; bunun yerine, klon parçayı kopyalayın. |
Model Davranışı
ModelStreamingBehaviour ı Gelişmiş ı ayarlarsanız, motor çıkış yapabilir Varsayılan ( 1>Nonatomic1> ) modelleri, çıkışa uygun olduklarında potansiyel olarak belleği serbest bırakır ve özellik güncellemelerini gerektiren istemleri azaltır.
Under Gelişmiş Modellemesiyle Gelen Yeni Model streaming davranışı, Varsayılan ( Nesnelleştirilmiş) modellerinden çıkış yaparak 1>geometrik1> ( 4> Class.BasePart4> çizgilileri içerir) veya 7>
- Bir uzay modeli sadece son kalan BasePart yuvarlaklarının akışını yapar, çünkü bazı model parçalarının uzay parçaları oyuncu/replikasyon odaklarına yakın olabilir ve uzak bir yerde.
- Bir uzay olmayan model sadece atalarınız çıktığında yayınlanır, mevcut miras yayınlanma davranışına eşdeğerdir.
Kaynaklar ve Mekanizmalar
Bir Assembly ın en az bir kısmı, yayınlanmaya uygun olabilir. Ancak, birAssembly'ın tüm kısımları tüket. Bir
bağlanmış parçalarla bağlanmış olanlar biraz farklı davranır:
Kazıcı Kompozisyonu | Yayınlanma Davranışı |
---|---|
Sabit olmayan parçalar sadece | Tüm montaj, bir atomik birim olarak gönderilir. |
Yerleştirilmiş kök parçası | Yayınlanan parçaları kök parçasına bağlayan sadece parçalar, bağlantılar ve kısıtlamalar yayınlanır. |
Zamanlayıcı Gecikme
Bir parçanın sunucuda oluşturulduğu ve müşterilere yeniden kopyalanmasıyla oluşan ~10 milisaniye arasında biraz gecikme olabilir. Her bir senaryoda, WaitForChild() ve diğer teknikleri parçanın yeniden kopyalanmasıyla ilgili olarak kullanmanız gerekebilir, bu da etkinleştirilmiş o
Senaryo | Örnek | Yayınlanma Davranışı |
---|---|---|
Bir LocalScript ile bir parça oluşturmak için sunucuya bir RemoteFunction çağrısı yapılır. | Bir oyuncu Tool yerel olarak etkinleştirir ve bir parçayı sunucuda her oyuncu görebilir ve etkileşime geçebilir. | Uzaktaki işlev kliği kliğe döndüğünde, parça kliğin yakınında ve bir yayın alanında olsa bile, parça henüz mevcut olmayabilir. |
Bir parça, bir Script ve bir RemoteEvent ile bir karaktere modeline eklenir. | Bir oyuncu polis takımına katıldığında, ServerStorage içindeki bir "polis rozeti" parçası klonlanır ve oyuncu'nun karakter modeline bağlanır. Bir RemoteEvent ise oyuncu tarafından gönderilir ve alıcı tarafından alıcı için güncellenir. | Mesajı alan klişe, parçanın zaten bu klişeye yayınlandığına dair garanti yoktur. |
Bir parça, sunucudaki görünmez bir bölge ile çarpışır ve kliende bir RemoteEvent oluşturur. | Bir oyuncu bir futbol topunu bir kaleye atar, bir "goal scored" olayını tetikler. | Hedefe yakın olan diğer oyuncular, top onlara yayınlanmadan önce "goal scored" olayını görebilir. |
Yayınlanma Özellikleri
Aşağıdaki özellikler, istemci yayınlanmasının deneyiminize nasıl uygulanacağını kontrol eder. Tüm bu özellikler skript olmayan ve Studio'nun Çalışma Alanı nesinde ayarlanmalıdır.
ModelStreaming Davranışı
Kontrol, bir oyuncu katıldığında Varsayılan ( Atom Bombası ) modellerinin kopyalanıp kaydedildiğini veya sadece gerektiğinde gönderildiğini kontrol eder. Bu özellik Gelişmiş olarak ayarlandıysa, katılma zamanında sadece gerektiğ
Yayınlanma Integrity Mode
Bir oyuncu, yayınlanmayan bir bölgeye hareket ederse deneyiminiz yanlış yönde tepki verebilir. Yayınlanma Integrity özelliği, bu olası olumsuz durumlardan kaçınmanın bir yolunu sunar. Ayrıntılar için lütfen Enum.StreamingIntegrityMode dokümanına bakın.
YayınlanmaMinRadius
StreamingMinRadius özelliği, oyuncunun karakterinin (veya Class.Player.ReplicationFocus|ReplicationFocus) etrafındaki akışın en yüksek önceliğinde akış yapacağı durumu gösterir. Özelleştirmeyi artırırken, bunun yerine daha fazla hafıza ve daha fazla sunucu bandı ücreti ödemek zorunda kalacaktır.
Yayınlandığınız hedef
StreamingTargetRadius özelliği, oyuncunun karakterinden (veya Class.Player.ReplicationFocus|ReplicationFocus) içinde çalışan akışların maksimum mesafesini kontrol eder. Motorun önce yüklenmiş olan instanslarının ötesindeki yüklenmiş olasılığını korumasına izin verilir.
Daha küçük bir StreamingTargetRadius sunucunun iş yükünü azaltır, çünkü sunucu set değerinin ötesinde ekstra bir istemde yayınlanmaz. Ancak, hedef yuvarlak, oyuncuların deneyiminizin tüm ayrıntılarını görebileceği mesafeyi ayarlar, bu yüzden bu araların arasında güzel bir denge oluşturan bir değer seçmelisiniz.
StreamOut davranışı
StreamOutBehavior özelliği, aşağıdaki değerlerden biriyle yayınlanma davranışını ayarlar:
Ayarlar | Yayınlanma Davranışı |
---|---|
Varsayılan | Varsayılan davranış, şu anda LowMemory ile aynı. |
DüşükHafıza | Klien sadece düşük bir bellek durumunda parçaları yayınlayabilir ve minimum çevre sadece mevcut olduğunda 3D içeriğini kaldırabilir. |
İşgücüneşeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimişeğilimi | StreamingTargetRadius aşan bölgeler klienin bile hafıza baskısı olmadan kaldırılabilir. Bu modda, klien asla hedef bölgesinden daha yakın olan bölgeleri kaldırmaz, sadece düşük hafıza durumlarında. |
Per-Model Yayın Kontrolleri
Küresel olarak, ModelStreamingBehavior özelliği, modellerin katılma sırasında nasıl yayınlandığını kontrol etmenizi sağlar. Ayrıca, yayınlanmayı WaitForChild() ve kullanımı azaltmak için Models
Varsayılan/Nonaturday
Bir Model İstek İşlemcisi olarak ayarlandığında, yayın davranışı Varsayılan veya Nonaktif olarak değişir, çünkü 1>ModelStreamingBehaviour1> İstek İşlemcisi 4>Varsayılan4> ( 7>Mirror7> ) veya 9>
ModelStreamingBehaviouru | Teknik Davranış |
---|---|
Varsayılan ( Miras ) | Bir oyuncu katıldığında model yeniden oluşturulur. Bu potansiyel olarak yükleme sırasında daha fazla istemci gönderilmesine, daha fazla istemci hafızaya ve modelin yeniden oluşturulması için ekstra karmaşıklığa neden olur. Örneğin, ayrı bir Class. |
Geliştirilmiş | Model yalnızca gerekli olduğunda gönderilir, potansiyel olarak katılma sürelerini hızlandırır. |
Daha fazla bilgi için Teknik Davranış bakın.
Atomik
Bir Model değiştirilirse, tüm ataları birleştirilir, bir atalanın Class.BasePart ile uy
Atomik bir model sadece tüm onunla ilgili yapı parçaları yayınlanabilir olduğunda yayınlanır, bu noktada tüm model yayınlanır birlikte. Eğer sadece bazı parçaların bir atomik modeli tipik olarak yayınlanırsa, tüm model ve onunla ilgili yapı parçaları kalır kalır kalır kalır kalır kalır kalır kalır kalır kalır kalır kalır kalır
Yerel Kod
-- Atom modeli yükleme sırasında mevcut değildir; WaitForChild()'yi kullanınlocal model = workspace:WaitForChild("Model")-- Ascendant parçalar model ile birbirine akış yapar ve derhal erişilebilirlocal meshPart = model.MeshPartlocal part = model.Part
Kalıcı
Kalıcı modeller normal yayınlanma içinde veya dışında değildir. Onlar oyuncu katıldıktan ve Workspace.PersistentLoaded etkinliğinden hemen sonra gö
Yerel Kod
-- Kalıcı model yükleme sırasında mevcut değildir; WaitForChild()'i kullanınlocal model = workspace:WaitForChild("Model")-- Ascendant parçalar model ile birbirine akış yapar ve derhal erişilebilirlocal meshPart = model.MeshPartlocal part = model.Part
KalıcıOyuncu
Modlar PersistentPerPlayer ile aynı davranır Persistent için oyuncular aynı davranır. Diğer oyuncular için davranış aynıdır Model:AddPersistentPlayer() . Bir modeli oyuncu persistensi aracılığıyla geri çevirebilirsiniz 1> Class.Model:RemovePersistentPlayer()1> .
Bölge Yayını talep ediyor
Bir oyuncu karakterinin CFrame ını bir bölge olarak ayarlanırsa, geçici duraklama ortaya çıkar, eğer etkinleştirilmişse. Eğer karakterin bölgeyi geçici olarak hareket ettireceğini biliyorsanız, 1>Class.Player:RequestStreamAroundAsync()1> ile</
Aşağıdaki kodlar, bir oyuncuyu yerleştirme için bir uzaktan etkinliği nasıl başlatacağını gösterir, yayınlandığında karakteri yeni bir CFrame içine hareket ettirir.
Kod - Oyuncu Karakterini Işınlat
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local teleportEvent = ReplicatedStorage:WaitForChild("TeleportEvent")
local function teleportPlayer(player, teleportTarget)
-- Hedef konumunun etrafında yayın talep et
player:RequestStreamAroundAsync(teleportTarget)
-- Karakteri Işınlaştır
local character = player.Character
if character and character.Parent then
local currentPivot = character:GetPivot()
character:PivotTo(currentPivot * CFrame.new(teleportTarget))
end
end
-- Müşteri uzaktaki etkinliği başlatırken ışınlanma işlevini çağır
teleportEvent.OnServerEvent:Connect(teleportPlayer)
Yerel Kod - Uzaktan Etkinlik
local ReplicatedStorage = game:GetService("ReplicatedStorage")local teleportEvent = ReplicatedStorage:WaitForChild("TeleportEvent")local teleportTarget = Vector3.new(50, 2, 120)-- Uzaktan etkinliği başlatteleportEvent:FireServer(teleportTarget)
İstemci Yayınını Tespit Etme
Bazı durumlarda, bir nesnenin akışını içinde veya dışında tespit etmek ve bu olaya tepki vermek gerekir. Bir yararlı yayınlanma tespit modeli şu şekildedir:
Bir örneğin özelliklerinin Etiketler bölümünden veya Studio'nun Etiket Editoru kullanılarak, etkili olan tüm durumüzerine mantıksal bir CollectionService etiketi atayın.
Tek bir LocalScript , bir etiketli nesne akışını GetInstanceAddedSignal() ve GetInstanceRemovedSignal() aracılığıyla veya 1>Class.CollectionService
YerelScript - CollectionService Yayınlanma Tespitilocal CollectionService = game:GetService("CollectionService")local tagName = "FlickerLightSource"local random = Random.new()local flickerSources = {}-- Güncel ve yeni işaretlenmiş parçaların yayınlanmasını veya çıkmasını algılayınfor _, light in CollectionService:GetTagged(tagName) doflickerSources[light] = trueendCollectionService:GetInstanceAddedSignal(tagName):Connect(function(light)flickerSources[light] = trueend)CollectionService:GetInstanceRemovedSignal(tagName):Connect(function(light)flickerSources[light] = nilend)-- Flicker döngüsüwhile true dofor light in flickerSources dolight.Brightness = 8 + random:NextNumber(-0.4, 0.4)endtask.wait(0.05)end
Müziği Durdurma Ekranını Özelleştirme
Class.Player.GameplayPaused özelliği, oyuncunun mevcutbekleme durumunu gösterir. Bu özellik, özel bir GUI'yu göstermek veya gizlemek için bir Class.Instance:GetPropertyChangedSignal()|GetPropertyChangedSignal() bağlantısıyla kullanılabilir.
Yerel Kod
local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local player = Players.LocalPlayer
-- Varsayılanbekleme modunu devre dışı bırak
GuiService:SetGameplayPausedNotificationEnabled(false)
local function onPauseStateChanged()
if player.GameplayPaused then
-- Özel GUI'yi göster
else
-- Özel GUI'yi gizle
end
end
player:GetPropertyChangedSignal("GameplayPaused"):Connect(onPauseStateChanged)
Detay Modeli
Yükleme aktifleştirildiğinde, Models yükleme alanının dışındaki şu anda yüklenen alanlarda görünmez olacaktır. Ancak, motoru "imposter" meshes'i için daha düşük çözünürlükte rendere etmeyi öğrenebilirsiniz, böylece mevcut olmayan modeller için klienler aracılı
Model Ayarları | Yayınlanma Davranışı |
---|---|
StreamingMesh | Modelin kliplerde mevcut olmadığında gösterilecek olan bir sahtekar malzeme oluşturmanın asenkron yüklenmesini etkinleştirir. |
Devre dışı bırakıldı / Otomatik olarak devre dışı bırakıldı | Model, yayınlanma menzilinin dışında kaybolur. |
Sahte malzeme kullanırken takip edilengöz önünde bulundurun:
- Sahtekar malzemeler, kamera'dan 1024 stud uzaktaki veya daha fazlasında görülmeyi planlıyor. Eğer StreamingTargetRadius 'i 256 gibi çok daha az bir değere azaltırsanız, sahtekar malzemeler modeli değiştireceğiniz model için görsel olarak kabul edilemeyebilir.
- Bir model ve onun çıkış modelleri tüm StreamingMesh olarak ayarlandı, ancak üst seviye atalet modeli sadece bir Disabled olarak görüntülenir, tüm geometileri atalet altında ve onun çıkış modelleri için de şekillendirir. Daha iyi sözleşme imzalamaiçin, descendant modeller için 1> Dis
- Metinler desteklenmiyor; sahte malzeme kalıplarına düz malzemeler görünüyor.
- Bir Model ın tam olarak yayınlanmasına rağmen, sahtekar malzeme modelinin bireysel parçalarının yerine renderlenir. Tüm bireysel parçalar yayınlandığında, sahtekar malzeme renderlenir ve sahtekar malzeme görmezden gelinir.
- Sahtekar malzemelerin hiçbir fiziksel önemi yoktur ve raycasting, çarpışma algılama ve fiziksel simülasyon açısından mevcut olmayan olarak davranır.
- Stüdyo'da bir modeli düzenlerken, çocuk parçaları eklemek/silmek/yeniden yerleştirmek veya renkleri sıfırlamak gibi, temsilci ağı otomatik olarak günceller.