Streaming delle istanze

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Lo streaming delle istanze in gioco consente al motore Roblox di caricare e scaricare dinamicamente contenuti 3D e istanze correlate in Workspace. Questo può migliorare l'esperienza complessiva del giocatore in diversi modi, tra cui:

  • Tempi di accesso più rapidi
    — I giocatori possono iniziare a giocare in una parte del mondo mentre il resto del mondo si carica in background.
  • Efficienza della memoria
    — I giochi possono essere giocati su dispositivi con meno memoria poiché i contenuti vengono trasmessi dinamicamente dentro e fuori. Mondi più immersivi e dettagliati possono essere giocati su una gamma più ampia di dispositivi.
  • Miglioramento delle prestazioni
    — Migliori frame rate e prestazioni, poiché il server può spendere meno tempo e larghezza di banda a sincronizzare le modifiche tra il mondo e i giocatori in esso. I client spendono meno tempo ad aggiornare le istanze che non sono attualmente rilevanti per il giocatore.
  • Livello di dettaglio
    — Quando configurato, modelli distanti, avatar di piattaforma e terreni rimangono visibili anche quando non vengono trasmessi ai client, mantenendo il gioco ottimizzato senza sacrificare completamente i dettagli visivi di sfondo. SLIM fornisce il livello di dettaglio di massima fedeltà sia per i modelli che per gli avatar.

Lo streaming delle istanze è controllato dalla proprietà Workspace.StreamingEnabled, abilitata per impostazione predefinita per i nuovi luoghi creati in Studio. Questa proprietà non può essere impostata in uno script.

La finestra Proprietà con la proprietà StreamingEnabled abilitata.

Comportamento tecnico

Ambito

La logica e le funzionalità di streaming si applicano esclusivamente alle istanze che sono discendenti di Workspace, mentre le istanze memorizzate in altri contenitori come ReplicatedStorage e ReplicatedFirst non sono idonee per lo streaming. Ad esempio, posizionare un modello atomico sotto ReplicatedStorage non garantisce la replicazione atomica.

Streaming in

Quando un giocatore entra in un gioco con lo streaming delle istanze abilitato:

  1. Le istanze in Workspace vengono replicate al client escludendo le seguenti:

    Models impostati su Nonatomico (predefinito) quando Workspace.ModelStreamingBehavior è impostato su Improved

    Discendenti delle istanze sopra

  2. Durante il gameplay, il server può trasmettere istanze nelle categorie differite sopra al client in base alle proprietà di streaming del gioco, alla posizione del giocatore, alle prestazioni del dispositivo client e ad altre condizioni.

Streaming out

Durante il gameplay, un client può rimuovere regioni di BaseParts dalla Workspace del giocatore in base al comportamento impostato da Workspace.StreamOutBehavior. Il processo inizia con le regioni più lontane dai foci di replicazione e si avvicina, se necessario. Le regioni all'interno dell'intervallo Workspace.StreamingMinRadius non vengono mai trasmesse.

Nota che un Model senza discendenti BasePart, come uno utilizzato semplicemente come "contenitore" per istanze non BasePart come script, è esente dallo streaming out a meno che non venga reso discendente di un BasePart.

Assemblaggi

Gli assemblaggi fisici vengono trasmessi in come unità complete, inclusi i loro Constraints e Attachments associati, aiutando a garantire aggiornamenti fisici coerenti sui client. L'unica eccezione è quando l'assemblaggio è ancorato, nel qual caso solo i BaseParts all'interno del raggio di streaming vengono trasmessi insieme ai loro Constraints e Attachments associati.

Gli assemblaggi non vengono trasmessi out fino a quando tutti i loro BaseParts non sono idonei per lo streaming out.

Proprietà di streaming

Le seguenti proprietà controllano come si applica lo streaming delle istanze al tuo gioco. Tutte queste proprietà sono non scriptabili e devono essere impostate sull'oggetto Workspace in Studio.

ProprietàDescrizione
EnableSLIMAvatarsControlla se un modello SLIM viene generato per i personaggi avatar nel gioco. Quando abilitato, gli avatar vengono renderizzati utilizzando SLIM nello stesso modo in cui l'impostazione Model.LevelOfDetail su SLIM funziona per altri modelli. Vedi SLIM per dettagli.
ModelStreamingBehaviorControlla come i modelli Nonatomici (predefinito) vengono trasmessi dentro e fuori.

RACCOMANDATO
Usa Improved per abilitare lo streaming più efficiente per i Models con discendenti BasePart.
PredictiveStreamingModeOpta per lo streaming predittivo che utilizza segnali del motore per trasmettere proattivamente aree che un giocatore è probabile che necessiti presto, come posizioni di respawn o regioni da cui il giocatore è recentemente uscito tramite cambiamento di CFrame. Le previsioni sono additive, scadono dopo un breve periodo se non utilizzate e vengono saltate su client con risorse limitate.
StreamingIntegrityModeIl gioco può comportarsi in modi imprevisti se un giocatore si sposta in una regione del mondo che non è stata trasmessa a loro. Questa proprietà offre un modo per evitare quelle situazioni potenzialmente problematiche.

RACCOMANDATO
Usa PauseOutsideLoadedArea per bilanciare l'integrità del gameplay senza mettere in pausa inutilmente o troppo spesso. Puoi anche personalizzare lo schermo di pausa.
StreamingMinRadiusQuesta proprietà indica il raggio attorno ai foci di replicazione in cui le istanze vengono trasmesse con la massima priorità. È necessario prestare attenzione quando si aumenta il valore predefinito, poiché ciò richiederà più memoria e più larghezza di banda del server a scapito di altri componenti.

RACCOMANDATO
Usa il valore predefinito di 64 per massimizzare quanto il motore può ridurre il gioco per dispositivi a bassa potenza.
StreamingTargetRadiusQuesta proprietà controlla la distanza massima dai foci di replicazione in cui le istanze vengono trasmesse. Nota che il motore è autorizzato a mantenere istanze precedentemente caricate oltre il raggio target, se la memoria lo consente.

Un StreamingTargetRadius più piccolo riduce il carico di lavoro del server, poiché il server non trasmetterà ulteriori istanze oltre il valore impostato. Tuttavia, il raggio target è anche la distanza massima a cui i giocatori potranno vedere il dettaglio completo del tuo gioco, quindi dovresti scegliere un valore che crei un buon equilibrio tra questi.

RACCOMANDATO
Usa il valore predefinito di 1024 per trovare un buon equilibrio tra visibilità per i giocatori su dispositivi ad alte prestazioni e un'impronta di memoria ragionevole.
StreamOutBehaviorQuesta proprietà imposta il comportamento di streaming out in base al valore di Enum.StreamOutBehavior. Se impostato su LowMemory (predefinito), il client trasmette solo le regioni oltre il raggio minimo in una situazione di bassa memoria. Se impostato su Opportunistic, le regioni oltre StreamingTargetRadius possono essere rimosse dal client anche quando non ci sono pressioni di memoria (in questa modalità, il client non rimuove mai le istanze che sono all'interno del raggio target, tranne che in situazioni di bassa memoria).

RACCOMANDATO
Usa Opportunistic per consentire al client di raccogliere aggressivamente contenuti non utilizzati, riducendo significativamente l'uso della memoria e aiutando a prevenire crash per esaurimento memoria.

Focalizzazione della replicazione

Per impostazione predefinita, lo streaming avviene attorno al PrimaryPart del personaggio locale del giocatore, anche se puoi specificare un diverso punto di focalizzazione della replicazione tramite Player.ReplicationFocus.

Puoi anche aggiungere e rimuovere ulteriori foci di replicazione tramite Player:AddReplicationFocus() e Player:RemoveReplicationFocus() per abilitare dinamicamente lo streaming in più aree del gioco.

La simulazione fisica lato client, inclusa la previsione e le risimulazioni quando viene implementata l'autorità del server, si verifica solo nelle aree trasmesse, anche per istanze create localmente e per istanze Persistent. Se hai istanze che desideri continuare a simulare anche quando sono lontane dal personaggio, crea un ulteriore focus di replicazione vicino a quelle istanze.

Streaming predittivo

Lo streaming predittivo è una funzionalità opzionale che utilizza segnali del motore per anticipare il movimento del giocatore e trasmettere proattivamente aree che il giocatore è probabile che necessiti presto. Quando abilitato impostando PredictiveStreamingMode su Enabled, può ridurre le pause di streaming e il pop-in visivo senza alcuna modifica al codice.

Lo streaming predittivo è additivo. Crea piccoli foci di streaming temporanei in aggiunta ai tuoi esistenti foci di replicazione, trasmette una piccola quantità di contenuto extra e non cambia la logica del tuo gioco o i contratti di streaming. Se una previsione non è necessaria, l'area prevista scade dopo un breve periodo e il motore scarica il contenuto. Il motore tiene anche conto della memoria e delle prestazioni del client, saltando le previsioni sui dispositivi con risorse limitate.

Quando PredictiveStreamingMode è Enabled, le seguenti funzionalità predittive sono attive:

FunzionalitàDescrizione
Pre-caricamento degli spawnQuando un giocatore muore, il motore crea piccoli foci di streaming temporanei in posizioni di spawn possibili in modo che le aree di respawn probabili inizino a essere trasmesse prima che il personaggio del giocatore appaia, riducendo le pause e i contenuti mancanti immediatamente dopo il respawn.
Ottimizzazione del ritorno di CFrameQuando un giocatore è CFrames lontano da un'area, il motore crea un piccolo focus di streaming temporaneo nella posizione da cui è uscito. Questo aiuta a mantenere quell'area trasmessa se il giocatore torna poco dopo, uno scenario comune quando si passa tra edifici, sottolivelli, negozi o hub.

Controlli di streaming per modello

Per evitare problemi con lo streaming su base per modello e minimizzare l'uso di WaitForChild(), puoi personalizzare come i Models e i loro discendenti vengono trasmessi attraverso la loro proprietà ModelStreamingMode.

Nonatomico

Per impostazione predefinita, i modelli sono Nonatomic e vengono trasmessi dentro/fuori in base a se Workspace.ModelStreamingBehavior è impostato su Legacy (predefinito) o Improved.

Legacy

Quando Workspace.ModelStreamingBehavior è impostato su Legacy (predefinito), il contenitore Model e i suoi discendenti non BasePart come Scripts replicano al client quando il giocatore entra. Poi, quando idonei, i discendenti BasePart del modello vengono trasmessi.

Migliorato

Quando Workspace.ModelStreamingBehavior è impostato su Improved, il comportamento di streaming del modello varia a seconda che il modello contenga discendenti BasePart o non contenga discendenti BasePart:

  • Un modello con discendenti BasePart viene trasmesso in solo quando uno dei suoi discendenti BasePart è idoneo per lo streaming in. A quel punto, il modello e il BasePart idoneo vengono trasmessi, insieme ai discendenti non BasePart del modello.

    Quando l'ultimo BasePart rimanente del modello viene trasmesso out, il modello stesso verrà trasmesso fuori insieme ad esso.

  • Un modello senza discendenti BasePart, come uno utilizzato semplicemente come "contenitore" per istanze non BasePart come script, replica al client poco dopo che il giocatore entra. Questo tipo di modello è esente dallo streaming out a meno che non venga reso discendente di un BasePart.

Atomico

Se un Model è impostato su Atomic, tutti i suoi discendenti iniziali vengono trasmessi insieme quando un discendente BasePart è idoneo per essere trasmesso. Di conseguenza, uno script lato client che deve accedere a istanze all'interno del modello dovrebbe utilizzare WaitForChild() sul modello stesso, ma non su un discendente MeshPart o Part poiché vengono inviati insieme al modello.

Un modello atomico viene trasmesso fuori solo quando tutte le sue parti discendenti sono idonee per lo streaming out, a quel punto l'intero modello viene trasmesso fuori insieme.

Un diagramma che mostra lo streaming del modello atomico insieme ai figli.

Persistente

I modelli Persistent non sono soggetti a normali streaming in o out. Vengono inviati come un'unità atomica completa poco dopo che il giocatore entra e prima che si attivi l'evento Workspace.PersistentLoaded . I modelli persistenti e i loro discendenti non vengono mai trasmessi fuori, ma per gestire in modo sicuro lo streaming all'interno di uno script lato client, dovresti attendere l'attivazione dell'evento PersistentLoaded.

Un diagramma che mostra lo streaming del modello persistente insieme ai figli.

PersistentePerGiocatore

I modelli impostati su PersistentPerPlayer si comportano allo stesso modo dei modelli Persistent per i giocatori che sono stati aggiunti utilizzando Model:AddPersistentPlayer(). Per altri giocatori, il comportamento è lo stesso di Atomic. Puoi ripristinare un modello dalla persistenza del giocatore tramite Model:RemovePersistentPlayer().

Personalizzazione dello schermo di pausa

Assumendo che Workspace.StreamingIntegrityMode sia impostato sul raccomandato PauseOutsideLoadedArea, il gioco si metterà in pausa se un giocatore si sposta in una regione del mondo che non è stata trasmessa a loro. In questi casi, la proprietà Player.GameplayPaused indica lo stato di pausa attuale del giocatore, che può essere utilizzato con una connessione GetPropertyChangedSignal() per mostrare o nascondere un'interfaccia grafica personalizzata.

LocalScript
local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local player = Players.LocalPlayer
-- Disabilita la modalità di pausa predefinita
GuiService:SetGameplayPausedNotificationEnabled(false)
local function onPauseStateChanged()
if player.GameplayPaused then
-- Mostra GUI personalizzata
else
-- Nascondi GUI personalizzata
end
end
player:GetPropertyChangedSignal("GameplayPaused"):Connect(onPauseStateChanged)

Debugging a runtime

Il motore include più pannelli di debug sullo schermo che possono essere abilitati sul client utilizzando scorciatoie da tastiera. Per accedere alle informazioni di debug dello streaming:

  1. Apri il sovrapposizione di debug Network Summary tramite ShiftCtrlF3 (Windows) o ShiftF3 (Mac).
  2. Una volta aperta la sovrapposizione di debug, premi Shift1 ripetutamente per scorrere i pannelli disponibili. Il quarto pannello è la vista di debug Streaming che visualizza informazioni utili a runtime:
    • Impostazioni di streaming attive
    • Regioni attualmente caricate (trasmesse)
    • Comportamento e stato dello streaming

Una volta abilitato, le regioni evidenziate a colori appaiono nella vista 3D:

ColoreDescrizione
Inferiore a StreamingMinRadius
Maggiore o uguale a StreamingMinRadius e inferiore a StreamingTargetRadius
Uguale a StreamingTargetRadius
Maggiore di StreamingTargetRadius
© 2026 Roblox Corporation. Roblox, il logo Roblox e Powering Imagination sono tra i nostri marchi registrati e non registrati negli Stati Uniti. e altri paesi.