Streaming de instâncias

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

No jogo, o streaming de instâncias 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 Entrada Mais Rápidos
    — Os jogadores podem começar a jogar em uma parte do mundo enquanto mais do mundo é carregado em segundo plano.
  • Eficiência de Memória
    — Os jogos podem ser jogados em dispositivos com menos memória, uma vez que o conteúdo é transmitido dinamicamente para dentro e para fora. Mundos mais imersivos e detalhados podem ser jogados em uma gama mais ampla 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 atualmente relevantes para o jogador.
  • Nível de Detalhe
    — Quando configurados, modelos distantes, avatares de plataforma e terrenos 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. SLIM fornece o nível de detalhe de maior fidelidade para modelos e avatares.

O streaming de instâncias é controlado pela propriedade Workspace.StreamingEnabled, ativada por padrão para novos lugares criados no Studio. Esta propriedade não pode ser definida em um script.

A janela de Propriedades com a propriedade StreamingEnabled ativada.

Comportamento técnico

Escopo

A lógica e os recursos de streaming se aplicam exclusivamente a instâncias que são descendentes de Workspace, enquanto instâncias armazenadas em outros contêineres, 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 para dentro

Quando um jogador entra em um jogo com o streaming de instâncias ativado:

  1. Instâncias no Workspace são replicadas para o cliente excluindo o seguinte:

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

    Descendentes das instâncias acima

  2. Durante o jogo, o servidor pode transmitir instâncias nas 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 para fora

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 move para mais perto, conforme necessário. Regiões dentro do alcance de Workspace.StreamingMinRadius nunca são transmitidas para fora.

Observe que um Model sem descendentes BasePart, como um usado meramente como um "contêiner" para instâncias não-BasePart, como scripts, é isento de streaming para fora a menos que seja feito um descendente de um BasePart.

Montagens

Montagens físicas montagens são transmitidas para dentro como unidades completas, incluindo seus Constraints e Attachments associados, ajudando a garantir atualizações de física consistentes 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 todos os seus BaseParts sejam elegíveis para streaming 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.

PropriedadeDescrição
EnableSLIMAvatarsControla se um modelo SLIM é gerado para personagens de avatar no jogo. Quando ativado, os avatares são renderizados usando SLIM da mesma forma que a configuração Model.LevelOfDetail para SLIM funciona para outros modelos. Veja SLIM para detalhes.
ModelStreamingBehaviorControla 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.
PredictiveStreamingModeOpta por streaming preditivo que usa sinais do mecanismo para transmitir proativamente áreas que um jogador provavelmente precisará em breve, como locais de respawn ou regiões que o jogador deixou recentemente via mudança de CFrame. As previsões são aditivas, expiram após um curto período se não forem usadas e são ignoradas em clientes com recursos limitados.
StreamingIntegrityModeO 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 personalizar a tela de pausa.
StreamingMinRadiusEsta propriedade indica o raio ao redor do foco de replicação no qual as instâncias são transmitidas com a maior prioridade. Deve-se ter cuidado ao aumentar o padrão, pois isso exigirá mais memória e mais largura de banda do servidor em detrimento de outros componentes.

RECOMENDADO
Use o padrão de 64 para maximizar o quanto o mecanismo pode reduzir o jogo para dispositivos de baixo desempenho.
StreamingTargetRadiusEsta propriedade controla a distância máxima do foco de replicação em que as instâncias são transmitidas. Observe que o mecanismo pode reter instâncias carregadas anteriormente além do raio alvo, desde que haja memória disponível.

Um StreamingTargetRadius menor reduz a carga de trabalho 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, então você deve escolher um valor que crie um bom equilíbrio entre esses fatores.

RECOMENDADO
Use o padrão de 1024 para encontrar um bom equilíbrio entre visibilidade para jogadores em dispositivos de alto desempenho e uma pegada de memória razoável.
StreamOutBehaviorEsta propriedade define o comportamento de streaming para fora de acordo com o valor de Enum.StreamOutBehavior. Se definido como LowMemory (padrão), o cliente apenas transmite regiões além do raio mínimo em uma situação de baixa memória. Se definido como Opportunistic, regiões além de 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 colete agressivamente conteúdo não utilizado, reduzindo significativamente o uso de memória e ajudando a prevenir falhas por falta de memória.

Foco de replicação

Por padrão, o streaming ocorre ao redor da 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 o 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.

Streaming preditivo

O streaming preditivo é um recurso opcional que usa sinais do mecanismo para antecipar o movimento do jogador e transmitir proativamente áreas que o jogador provavelmente precisará em breve. Quando ativado definindo PredictiveStreamingMode como Enabled, ele pode reduzir pausas de streaming e pop-ins visuais sem alterações no código.

O streaming preditivo é aditivo. Ele cria pequenos focos de streaming temporários além dos seus focos de replicação existentes, transmite uma pequena quantidade de conteúdo extra e não altera sua lógica de jogo ou contratos de streaming. Se uma previsão não for necessária, a área prevista expira após um curto período e o mecanismo descarrega o conteúdo. O mecanismo também leva em conta a memória e o desempenho do cliente, ignorando previsões em dispositivos com recursos limitados.

Quando PredictiveStreamingMode é Enabled, os seguintes recursos preditivos estão ativos:

RecursoDescrição
Pré-carregamento de spawnQuando um jogador morre, o mecanismo cria pequenos focos de streaming temporários em locais de spawn possíveis para que áreas de respawn prováveis comecem a ser transmitidas antes que o personagem do jogador apareça, reduzindo pausas e conteúdo ausente imediatamente após o respawn.
Otimização de retorno de CFrameQuando um jogador está CFrames longe de uma área, o mecanismo cria um pequeno foco de streaming temporário na localização que ele deixou. Isso ajuda a manter essa área transmitida se o jogador retornar logo em seguida, um cenário comum ao se mover entre edifícios, subníveis, lojas ou centros.

Controles de streaming por modelo

Para evitar problemas com 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, os 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 contêiner 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.

Melhorado

Quando Workspace.ModelStreamingBehavior está definido como Improved, o comportamento de streaming do modelo 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 ponto, o modelo e o BasePart elegível são transmitidos, junto com os descendentes não-BasePart do modelo.

    Quando o último BasePart restante do modelo é transmitido para fora, o modelo em si será transmitido para fora junto com ele.

  • Um modelo sem descendentes BasePart, como um usado meramente como um "contêiner" para instâncias não-BasePart, replica para o cliente logo após o jogador entrar. Esse tipo de modelo é isento de streaming para fora a menos que seja feito um descendente de um BasePart.

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 próprio modelo, mas não em um descendente MeshPart ou Part, uma vez que eles são enviados junto com o modelo.

Um modelo atômico só é transmitido para fora quando todos os seus partes descendentes são elegíveis para streaming para fora, momento em que o modelo inteiro é transmitido para fora junto.

Um diagrama mostrando o streaming de modelo atômico junto com filhos.

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 acionado. Modelos persistentes e seus descendentes nunca são transmitidos para fora, mas para lidar com streaming de forma segura dentro de um script do lado do cliente, você deve esperar que o evento PersistentLoaded seja acionado.

Um diagrama mostrando o streaming de modelo persistente junto com filhos.

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().

Personalizaçã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
-- Desativar 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 em tempo de execução

O mecanismo inclui vários painéis de depuração na tela que podem ser ativados no cliente usando atalhos de teclado. Para acessar informações de depuração de streaming:

  1. Abra a sobreposição de depuração Resumo de Rede via ShiftCtrlF3 (Windows) ou ShiftF3 (Mac).
  2. 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 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 ativadas, regiões destacadas em cores aparecem na visualização 3D:

CorDescrição
Menos que StreamingMinRadius
Maior ou igual a StreamingMinRadius e menor que StreamingTargetRadius
Igual a StreamingTargetRadius
Maior que StreamingTargetRadius
©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.