O streaming de instâncias no jogo permite que o mecanismo Roblox carregue e descarregue dinamicamente conteúdo 3D e instâncias relacionadas no Workspace. Isso pode melhorar a experiência geral do jogador de várias maneiras, incluindo:
- Tempos de Conexão Mais Rápidos— Os jogadores podem começar a jogar em uma parte do mundo enquanto mais do mundo carrega em segundo plano.
- Eficiência de Memória— Jogos podem ser jogados em dispositivos com menos memória, já que o conteúdo é transmitido dinamicamente. Mundos mais imersivos e detalhados podem ser jogados em uma gama maior de dispositivos.
- Desempenho Aprimorado— Melhores taxas de quadros e desempenho, já que o servidor pode gastar menos tempo e largura de banda sincronizando mudanças entre o mundo e os jogadores nele. Os clientes gastam menos tempo atualizando instâncias que não são relevantes para o jogador no momento.
- Nível de Detalhe— Quando configurado, modelos distantes, avatares de plataforma e terreno permanecem visíveis mesmo quando não estão sendo transmitidos para os clientes, mantendo o jogo otimizado sem sacrificar completamente os visuais de fundo.
O streaming de instâncias é controlado pela propriedade Workspace.StreamingEnabled, habilitada por padrão para novos lugares criados no Studio. Esta propriedade não pode ser definida em um script.

Comportamento técnico
Escopo
A lógica e os recursos de streaming se aplicam exclusivamente às instâncias que são descendentes de Workspace, enquanto instâncias armazenadas em outros containers, como ReplicatedStorage e ReplicatedFirst, não são elegíveis para streaming. Por exemplo, colocar um modelo atômico sob ReplicatedStorage não garante replicação atômica.
Streaming In
Quando um jogador entra em um jogo com streaming de instâncias habilitado:
Instâncias no Workspace são replicadas para o cliente excluindo as seguintes:

Models configurados como Atômicos, Persistentes ou PersistentesPorJogador; veja os controles de streaming por modelo

Models configurados como Não Atômicos (padrão) quando Workspace.ModelStreamingBehavior está definido como Improved

Descendentes das instâncias acima
Durante o jogo, o servidor pode transmitir instâncias das categorias adiadas acima para o cliente com base nas propriedades de streaming do jogo, na posição do jogador, no desempenho do dispositivo do cliente e em outras condições.
Streaming Out
Durante o jogo, um cliente pode remover regiões de BaseParts do Workspace do jogador com base no comportamento definido por Workspace.StreamOutBehavior. O processo começa com regiões mais distantes dos focos de replicação e se aproxima, conforme necessário. Regiões dentro do alcance de Workspace.StreamingMinRadius nunca são transmitidas para fora.
Note que um Model sem descendentes BasePart, como um que é usado apenas como um "container" para instâncias que não são BasePart, como scripts, é isento de ser transmitido para fora a menos que seja feito um descendente de um BasePart.
Montagens
Montagens físicas assemblies são transmitidas dentro como unidades completas, incluindo seus Constraints e Attachments associados, ajudando a garantir atualizações consistentes de física nos clientes. A única exceção é quando a montagem está ancorada, caso em que apenas os BaseParts dentro do raio de streaming são transmitidos junto com seus Constraints e Attachments associados.
Montagens não são transmitidas para fora até que todas as suas BaseParts sejam elegíveis para serem transmitidas para fora.
Propriedades de streaming
As seguintes propriedades controlam como o streaming de instâncias se aplica ao seu jogo. Todas essas propriedades são não scriptáveis e devem ser definidas no objeto Workspace no Studio.

| Propriedade | Descrição |
|---|---|
| EnableSLIMAvatars | Controla se um modelo SLIM é gerado para personagens de avatar no jogo. Quando habilitado, os avatares são renderizados usando SLIM da mesma forma que definir Model.LevelOfDetail para SLIM funciona para outros modelos. |
| ModelStreamingBehavior | Controla como os modelos Não Atômicos (padrão) são transmitidos para dentro e para fora. RECOMENDADO Use Improved para habilitar o streaming mais eficiente para Models com descendentes BasePart. |
| StreamingIntegrityMode | O jogo pode se comportar de maneiras não intencionais se um jogador se mover para uma região do mundo que não foi transmitida para ele. Esta propriedade oferece uma maneira de evitar essas situações potencialmente problemáticas. RECOMENDADO Use PauseOutsideLoadedArea para equilibrar a integridade do jogo sem pausar desnecessariamente ou com muita frequência. Você também pode customizar a tela de pausa. |
| StreamingMinRadius | Esta propriedade indica o raio em torno do foco de replicação no qual as instâncias são transmitidas com a maior prioridade. Deve-se ter cuidado ao aumentar o valor padrão, pois isso exigirá mais memória e largura de banda do servidor às custas de outros componentes. RECOMENDADO Use o padrão de 64 para maximizar o quanto o motor pode escalar o jogo para dispositivos de baixo desempenho. |
| StreamingTargetRadius | Esta propriedade controla a distância máxima a partir dos focos de replicação na qual as instâncias são transmitidas. Note que o motor pode reter instâncias previamente carregadas além do raio alvo, se a memória permitir. Um StreamingTargetRadius menor reduz a carga do servidor, pois o servidor não transmitirá instâncias adicionais além do valor definido. No entanto, o raio alvo também é a distância máxima que os jogadores poderão ver o detalhe completo do seu jogo, portanto, você deve escolher um valor que crie um bom equilíbrio entre esses dois aspectos. RECOMENDADO Use o padrão de 1024 para alcançar um bom equilíbrio entre visibilidade para jogadores em dispositivos de alto desempenho e uma pegada de memória razoável. |
| StreamOutBehavior | Esta propriedade define o comportamento de streaming para fora de acordo com o valor de Enum.StreamOutBehavior. Se definido como LowMemory (padrão), o cliente só remove regiões além do raio mínimo em uma situação de baixa memória. Se definido como Opportunistic, regiões além do StreamingTargetRadius podem ser removidas no cliente mesmo quando não há pressão de memória (neste modo, o cliente nunca remove instâncias que estão dentro do raio alvo, exceto em situações de baixa memória). RECOMENDADO Use Opportunistic para permitir que o cliente faça uma coleta agressiva de lixo, reduzindo significativamente o uso de memória e ajudando a evitar falhas por falta de memória. |
Foco de replicação
Por padrão, o streaming ocorre ao redor do PrimaryPart do personagem do jogador local, embora você possa especificar um ponto de foco de replicação diferente através de Player.ReplicationFocus.
Você também pode adicionar e remover focos de replicação adicionais através de Player:AddReplicationFocus() e Player:RemoveReplicationFocus() para habilitar dinamicamente streaming em várias áreas do jogo.
A simulação física do lado do cliente, incluindo previsão e resimulações quando a autoridade do servidor é implementada, ocorre apenas em áreas transmitidas, mesmo para instâncias criadas localmente e para instâncias Persistent. Se você tiver instâncias que gostaria de manter simulando mesmo quando estão longe do personagem, crie um foco de replicação adicional perto dessas instâncias.
Controles de streaming de modelo
Para evitar problemas de streaming em uma base por modelo e minimizar o uso de WaitForChild(), você pode personalizar como Models e seus descendentes são transmitidos através da propriedade ModelStreamingMode.
Não Atômico
Por padrão, modelos são Nonatomic e eles são transmitidos para dentro/fora com base em se Workspace.ModelStreamingBehavior está definido como Legacy (padrão) ou Improved.
Legado
Quando Workspace.ModelStreamingBehavior está definido como Legacy (padrão), o container Model e seus descendentes não BasePart, como Scripts, replicam para o cliente quando o jogador entra. Então, quando elegíveis, os descendentes BasePart do modelo são transmitidos.

Aprimorado
Quando Workspace.ModelStreamingBehavior está definido como Improved, o comportamento de streaming dos modelos varia dependendo de se o modelo contém descendentes BasePart ou não:
Um modelo com descendentes BasePart é transmitido para dentro apenas quando um de seus descendentes BasePart é elegível para ser transmitido. Nesse momento, o modelo e o BasePart elegível são transmitidos, juntamente com os descendentes não BasePart do modelo.
Quando o último BasePart do modelo é transmitido para fora, o modelo em si será transmitido junto com ele.

Atômico
Se um Model estiver definido como Atomic, todos os seus descendentes iniciais são transmitidos juntos quando um descendente BasePart é elegível para ser transmitido. Como resultado, um script do lado do cliente que precisa acessar instâncias dentro do modelo precisaria usar WaitForChild() no modelo em si, mas não em um descendente MeshPart ou Part, uma vez que eles são enviados juntamente com o modelo.
Um modelo atômico só é transmitido para fora quando todas as suas partes descendentes são elegíveis para streaming para fora, momento em que o modelo inteiro será transmitido junto.

Persistente
Modelos Persistent não estão sujeitos ao streaming normal para dentro ou para fora. Eles são enviados como uma unidade atômica completa logo após o jogador entrar e antes que o evento Workspace.PersistentLoaded seja disparado. Modelos persistentes e seus descendentes nunca são transmitidos para fora, mas para manipular o streaming de maneira segura em um script do lado do cliente, você deve esperar o evento PersistentLoaded ser disparado.

PersistentePorJogador
Modelos definidos como PersistentPerPlayer se comportam da mesma forma que Persistent para jogadores que foram adicionados usando Model:AddPersistentPlayer(). Para outros jogadores, o comportamento é o mesmo que Atomic. Você pode reverter um modelo da persistência do jogador através de Model:RemovePersistentPlayer().
Customização da tela de pausa
Assumindo que Workspace.StreamingIntegrityMode está definido como o recomendado PauseOutsideLoadedArea, o jogo irá pausar se um jogador se mover para uma região do mundo que não foi transmitida para ele. Nesses casos, a propriedade Player.GameplayPaused indica o estado atual de pausa do jogador, que pode ser usado com uma conexão GetPropertyChangedSignal() para mostrar ou ocultar uma GUI personalizada.
LocalScript
local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local player = Players.LocalPlayer
-- Desabilitar modal de pausa padrão
GuiService:SetGameplayPausedNotificationEnabled(false)
local function onPauseStateChanged()
if player.GameplayPaused then
-- Mostrar GUI personalizada
else
-- Ocultar GUI personalizada
end
end
player:GetPropertyChangedSignal("GameplayPaused"):Connect(onPauseStateChanged)
Depuração de tempo de execução
O mecanismo inclui vários painéis de depuração na tela que podem ser habilitados no cliente usando atalhos de teclado. Para acessar informações de depuração de streaming:
Abra a sobreposição de depuração Resumo de Rede através de ShiftCtrlF3 (Windows) ou Shift⌘F3 (Mac).
Uma vez que a sobreposição de depuração esteja aberta, pressione Shift1 repetidamente para alternar entre os painéis disponíveis. O quarto painel é a visualização de depuração de Streaming, que exibe informações úteis em tempo de execução:
- Configurações de streaming ativas
- Regiões atualmente carregadas (transmitidas)
- Comportamento e estado de streaming
Uma vez habilitado, regiões destacadas em cores aparecem na visualização 3D:
| Cor | Descrição |
|---|---|
| Menos que StreamingMinRadius | |
| Maior ou igual a StreamingMinRadius e menor que StreamingTargetRadius | |
| Igual a StreamingTargetRadius | |
| Maior que StreamingTargetRadius |
