İstemci Yayını

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

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.

The Properties window with the StreamingEnabled property enabled.

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.
  • Bir oyuncunun karakterini yer değiştirerek ayarlarsanız, bunu bir sunucu tarafından CFrame ile yapın ve Script kullanarak daha hızlı yükleme için yayın isteklerini kullanın.
  • 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:

Daha sonra, oynanışsırasında, sunucu gerekli istanzları gerektiğinde kliğe yayınlayabilir.

Diagram showing when various instances and their descendants in the Workspace stream in.
1 Arazi benzersiz bir şekilde ele alınır, bu durumda deneyim yüklendiğinde istemciye kopyalanır, ancak arazi bölgeleri sadece gerektiğinde akış yapar

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ş

The Properties window with the ModelStreamingBehavior property set to Default.

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

Diagram showing default model stream in behavior.

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ÖrnekYayı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.

The Properties window with the ModelStreamingBehavior property set to Improved.

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ı KompozisyonuYayınlanma Davranışı
Sabit olmayan parçalar sadeceTü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ÖrnekYayı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.

The Properties window with the ModelStreamingBehavior, StreamingIntegrityMode, StreamingMidRadius, StreamingTargetRadius, and StreamOutBehavior property highlighted.

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:

AyarlarYayı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ğilimiStreamingTargetRadius 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

The Properties window with the ModelStreamingMode property set to Default. The property is also highlighted.

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>

ModelStreamingBehaviouruTeknik 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

A diagram showing Atomic model streaming along with children.
Yerel Kod

-- Atom modeli yükleme sırasında mevcut değildir; WaitForChild()'yi kullanın
local model = workspace:WaitForChild("Model")
-- Ascendant parçalar model ile birbirine akış yapar ve derhal erişilebilir
local meshPart = model.MeshPart
local 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ö

A diagram showing Persistent model streaming along with children.
Yerel Kod

-- Kalıcı model yükleme sırasında mevcut değildir; WaitForChild()'i kullanın
local model = workspace:WaitForChild("Model")
-- Ascendant parçalar model ile birbirine akış yapar ve derhal erişilebilir
local meshPart = model.MeshPart
local 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şlat
teleportEvent: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:

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

  2. Tek bir LocalScript , bir etiketli nesne akışını GetInstanceAddedSignal() ve GetInstanceRemovedSignal() aracılığıyla veya 1>Class.CollectionService

    YerelScript - CollectionService Yayınlanma Tespiti

    local 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ın
    for _, light in CollectionService:GetTagged(tagName) do
    flickerSources[light] = true
    end
    CollectionService:GetInstanceAddedSignal(tagName):Connect(function(light)
    flickerSources[light] = true
    end)
    CollectionService:GetInstanceRemovedSignal(tagName):Connect(function(light)
    flickerSources[light] = nil
    end)
    -- Flicker döngüsü
    while true do
    for light in flickerSources do
    light.Brightness = 8 + random:NextNumber(-0.4, 0.4)
    end
    task.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ı

LevelOfDetail property indicated for Model instance
A globe model displays in its actual level of detail.
Aktuel modeli
The same globe model displays as a low resolution imposter mesh with rough edges that obscure the globe's details.
Düşük çözünürlükte "imposter" meshesi
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.