Streaming d'instance

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Dans le jeu, le streaming d'instance permet au moteur Roblox de charger et décharger dynamiquement du contenu 3D et des instances associées dans le Workspace. Cela peut améliorer l'expérience globale des joueurs de plusieurs manières, notamment :

  • Temps de Rejoindre Plus Rapides
    — Les joueurs peuvent commencer à jouer dans une partie du monde pendant que le reste du monde se charge en arrière-plan.
  • Efficacité Mémoire
    — Les jeux peuvent être joués sur des appareils avec moins de mémoire puisque le contenu est diffusé dynamiquement. Des mondes plus immersifs et détaillés peuvent être joués sur une plus large gamme d'appareils.
  • Performance Améliorée
    — Meilleurs taux de rafraîchissement et performance, car le serveur peut passer moins de temps et de bande passante à synchroniser les changements entre le monde et les joueurs qui s'y trouvent. Les clients passent moins de temps à mettre à jour des instances qui ne sont pas actuellement pertinentes pour le joueur.
  • Niveau de Détail
    — Lorsqu'il est configuré, les modèles distants, les avatars de plateforme et le terrain restent visibles même lorsqu'ils ne sont pas diffusés aux clients, gardant le jeu optimisé sans sacrifier entièrement les visuels d'arrière-plan. SLIM fournit le niveau de détail le plus élevé pour les modèles et les avatars.

Le streaming d'instance est contrôlé par la propriété Workspace.StreamingEnabled, activée par défaut pour les nouveaux lieux créés dans Studio. Cette propriété ne peut pas être définie dans un script.

La fenêtre des Propriétés avec la propriété StreamingEnabled activée.

Comportement technique

Portée

La logique et les fonctionnalités de streaming s'appliquent exclusivement aux instances qui sont des descendants de Workspace, tandis que les instances stockées dans d'autres conteneurs tels que ReplicatedStorage et ReplicatedFirst ne sont pas éligibles pour le streaming. Par exemple, placer un modèle atomique sous ReplicatedStorage ne garantit pas la réplication atomique.

Diffusion

Lorsqu'un joueur rejoint un jeu avec le streaming d'instance activé :

  1. Les instances dans le Workspace sont répliquées au client à l'exception des éléments suivants :

    Models définis comme Nonatomiques (par défaut) lorsque Workspace.ModelStreamingBehavior est défini sur Improved

    Descendants des instances ci-dessus

  2. Pendant le gameplay, le serveur peut diffuser des instances dans les catégories différées ci-dessus au client en fonction des propriétés de streaming du jeu, de la position du joueur, des performances de l'appareil client et d'autres conditions.

Diffusion sortante

Pendant le gameplay, un client peut retirer des régions de BaseParts du Workspace du joueur en fonction du comportement défini par Workspace.StreamOutBehavior. Le processus commence par les régions les plus éloignées des foci de réplication et se rapproche, si nécessaire. Les régions à l'intérieur de la plage Workspace.StreamingMinRadius ne sont jamais diffusées.

Notez qu'un Model sans descendants BasePart, comme celui utilisé simplement comme "conteneur" pour des instances non-BasePart comme des scripts, est exempt de la diffusion sortante à moins qu'il ne soit devenu un descendant d'un BasePart.

Assemblages

Les assemblages physiques sont diffusés en tant qu'unités complètes, y compris leurs Constraints et Attachments associés, aidant à garantir des mises à jour de physique cohérentes sur les clients. La seule exception est lorsque l'assemblage est ancré, auquel cas seuls les BaseParts dans le rayon de diffusion sont diffusés avec leurs Constraints et Attachments associés.

Les assemblages ne sont pas diffusés sortants tant que tous leurs BaseParts ne sont pas éligibles pour être diffusés.

Propriétés de streaming

Les propriétés suivantes contrôlent comment le streaming d'instance s'applique à votre jeu. Toutes ces propriétés sont non scriptables et doivent être définies sur l'objet Workspace dans Studio.

PropriétéDescription
EnableSLIMAvatarsContrôle si un modèle SLIM est généré pour les personnages avatars dans le jeu. Lorsqu'il est activé, les avatars se rendent en utilisant SLIM de la même manière que le réglage de Model.LevelOfDetail sur SLIM fonctionne pour d'autres modèles. Voir SLIM pour plus de détails.
ModelStreamingBehaviorContrôle comment les modèles Nonatomiques (par défaut) se diffusent.

RECOMMANDÉ
Utilisez Improved pour activer le streaming le plus efficace pour les Models avec des descendants BasePart.
PredictiveStreamingModeOpte pour le streaming prédictif qui utilise des signaux du moteur pour diffuser de manière proactive des zones qu'un joueur est susceptible de nécessiter bientôt, telles que des emplacements de réapparition ou des régions que le joueur a récemment quittées via un changement de CFrame. Les prédictions sont additives, expirent après un court laps de temps si inutilisées, et sont ignorées sur les clients à ressources limitées.
StreamingIntegrityModeLe jeu peut se comporter de manière inattendue si un joueur se déplace dans une région du monde qui n'a pas été diffusée pour lui. Cette propriété offre un moyen d'éviter ces situations potentiellement problématiques.

RECOMMANDÉ
Utilisez PauseOutsideLoadedArea pour équilibrer l'intégrité du gameplay sans mettre en pause inutilement ou trop souvent. Vous pouvez également personnaliser l'écran de pause.
StreamingMinRadiusCette propriété indique le rayon autour des foci de réplication dans lequel les instances se diffusent avec la plus haute priorité. Il convient d'être prudent lors de l'augmentation de la valeur par défaut, car cela nécessitera plus de mémoire et plus de bande passante serveur au détriment d'autres composants.

RECOMMANDÉ
Utilisez la valeur par défaut de 64 pour maximiser la capacité du moteur à réduire la taille du jeu pour les appareils bas de gamme.
StreamingTargetRadiusCette propriété contrôle la distance maximale par rapport aux foci de réplication dans laquelle les instances se diffusent. Notez que le moteur est autorisé à conserver des instances précédemment chargées au-delà du rayon cible, si la mémoire le permet.

Un StreamingTargetRadius plus petit réduit la charge de travail du serveur, car le serveur ne diffusera pas d'instances supplémentaires au-delà de la valeur définie. Cependant, le rayon cible est également la distance maximale à laquelle les joueurs pourront voir le détail complet de votre jeu, donc vous devriez choisir une valeur qui crée un bon équilibre entre ces deux aspects.

RECOMMANDÉ
Utilisez la valeur par défaut de 1024 pour trouver un bon équilibre entre la visibilité pour les joueurs sur des appareils haut de gamme et une empreinte mémoire raisonnable.
StreamOutBehaviorCette propriété définit le comportement de diffusion sortante selon la valeur de Enum.StreamOutBehavior. Si elle est définie sur LowMemory (par défaut), le client ne diffuse que les régions au-delà du rayon minimum dans une situation de faible mémoire. Si elle est définie sur Opportunistic, les régions au-delà de StreamingTargetRadius peuvent être supprimées sur le client même lorsqu'il n'y a pas de pression mémoire (dans ce mode, le client ne supprime jamais les instances qui se trouvent dans le rayon cible, sauf en cas de faible mémoire).

RECOMMANDÉ
Utilisez Opportunistic pour permettre au client de collecter agressivement les contenus inutilisés, réduisant ainsi considérablement l'utilisation de la mémoire et aidant à prévenir les plantages dus à un manque de mémoire.

Focalisation de réplication

Par défaut, le streaming se produit autour du PrimaryPart du personnage local du joueur, bien que vous puissiez spécifier un point de focalisation de réplication différent via Player.ReplicationFocus.

Vous pouvez également ajouter et supprimer des foci de réplication supplémentaires via Player:AddReplicationFocus() et Player:RemoveReplicationFocus() pour activer dynamiquement le streaming dans plusieurs zones du jeu.

La simulation physique côté client, y compris la prédiction et les resimulations lorsque l'autorité du serveur est mise en œuvre, ne se produit que dans les zones diffusées, même pour les instances créées localement et pour les instances Persistent. Si vous avez des instances que vous souhaitez continuer à simuler même lorsqu'elles sont éloignées du personnage, créez un point de focalisation de réplication supplémentaire près de ces instances.

Streaming prédictif

Le streaming prédictif est une fonctionnalité opt-in qui utilise des signaux du moteur pour anticiper le mouvement des joueurs et diffuser de manière proactive des zones que le joueur est susceptible de nécessiter bientôt. Lorsqu'il est activé en définissant PredictiveStreamingMode sur Enabled, cela peut réduire les pauses de streaming et les apparitions visuelles sans aucun changement de code.

Le streaming prédictif est additif. Il crée de petits foci de streaming temporaires en plus de vos foci de réplication existants, diffuse une petite quantité de contenu supplémentaire et ne change pas votre logique de jeu ou vos contrats de streaming. Si une prédiction n'est pas nécessaire, la zone prédite expire après un court laps de temps et le moteur décharge le contenu. Le moteur prend également en compte la mémoire et les performances du client, en ignorant les prédictions sur les appareils à ressources limitées.

Lorsque PredictiveStreamingMode est Enabled, les fonctionnalités prédictives suivantes sont actives :

FonctionnalitéDescription
Pré-chargement de réapparitionLorsqu'un joueur meurt, le moteur crée de petits foci de streaming temporaires aux emplacements de réapparition possibles afin que les zones de réapparition probables commencent à se diffuser avant que le personnage du joueur n'apparaisse, réduisant ainsi les pauses et le contenu manquant immédiatement après la réapparition.
Optimisation du retour CFrameLorsqu'un joueur est CFrames d'une zone, le moteur crée un petit point de focalisation de streaming temporaire à l'emplacement qu'il a quitté. Cela aide à garder cette zone diffusée si le joueur revient peu après, un scénario courant lors des déplacements entre bâtiments, sous-niveaux, magasins ou hubs.

Contrôles de streaming par modèle

Pour éviter des problèmes de streaming sur une base par modèle et minimiser l'utilisation de WaitForChild(), vous pouvez personnaliser comment les Models et leurs descendants se diffusent via leur propriété ModelStreamingMode.

Nonatomique

Par défaut, les modèles sont Nonatomic et se diffusent en fonction de si Workspace.ModelStreamingBehavior est défini sur Legacy (par défaut) ou Improved.

Héritage

Lorsque Workspace.ModelStreamingBehavior est défini sur Legacy (par défaut), le conteneur Model et ses descendants non-BasePart tels que Scripts se répliquent au client lorsque le joueur rejoint. Ensuite, lorsque cela est éligible, les descendants BasePart du modèle se diffusent.

Amélioré

Lorsque Workspace.ModelStreamingBehavior est défini sur Improved, le comportement de streaming des modèles varie selon que le modèle contient des descendants BasePart ou n'en contient pas :

  • Un modèle avec des descendants BasePart se diffuse en seulement lorsque l'un de ses descendants BasePart est éligible pour se diffuser. À ce moment-là, le modèle et le BasePart éligible se diffusent, ainsi que les descendants non-BasePart du modèle.

    Lorsque le tout dernier BasePart restant du modèle se diffuse sortant, le modèle lui-même se diffusera également avec lui.

  • Un modèle sans descendants BasePart, comme celui utilisé simplement comme "conteneur" pour des instances non-BasePart comme des scripts, se réplique au client peu après que le joueur rejoigne. Ce type de modèle est exempt de la diffusion sortante à moins qu'il ne soit devenu un descendant d'un BasePart.

Atomique

Si un Model est défini sur Atomic, tous ses descendants initiaux sont diffusés ensemble lorsqu'un descendant BasePart est éligible pour être diffusé. En conséquence, un script côté client qui doit accéder aux instances à l'intérieur du modèle devrait utiliser WaitForChild() sur le modèle lui-même, mais pas sur un descendant MeshPart ou Part puisque ceux-ci sont envoyés avec le modèle.

Un modèle atomique n'est diffusé que lorsque tous ses parties descendantes sont éligibles pour le streaming sortant, à quel point l'ensemble du modèle se diffuse ensemble.

Un diagramme montrant le streaming de modèle atomique avec ses enfants.

Persistant

Les modèles Persistent ne sont pas soumis au streaming normal entrant ou sortant. Ils sont envoyés comme une unité atomique complète peu après que le joueur rejoigne et avant que l'événement Workspace.PersistentLoaded ne se déclenche. Les modèles persistants et leurs descendants ne sont jamais diffusés, mais pour gérer en toute sécurité le streaming entrant dans un script côté client, vous devez attendre que l'événement PersistentLoaded se déclenche.

Un diagramme montrant le streaming de modèle persistant avec ses enfants.

PersistantParJoueur

Les modèles définis sur PersistentPerPlayer se comportent de la même manière que Persistent pour les joueurs qui ont été ajoutés en utilisant Model:AddPersistentPlayer(). Pour les autres joueurs, le comportement est le même que Atomic. Vous pouvez revenir à un modèle de persistance par joueur via Model:RemovePersistentPlayer().

Personnalisation de l'écran de pause

En supposant que Workspace.StreamingIntegrityMode est défini sur le recommandé PauseOutsideLoadedArea, le jeu se mettra en pause si un joueur se déplace dans une région du monde qui n'a pas été diffusée pour lui. Dans ces cas, la propriété Player.GameplayPaused indique l'état de pause actuel du joueur, qui peut être utilisé avec une connexion GetPropertyChangedSignal() pour afficher ou masquer une interface utilisateur personnalisée.

LocalScript
local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local player = Players.LocalPlayer
-- Désactiver la modal par défaut de pause
GuiService:SetGameplayPausedNotificationEnabled(false)
local function onPauseStateChanged()
if player.GameplayPaused then
-- Afficher l'interface utilisateur personnalisée
else
-- Masquer l'interface utilisateur personnalisée
end
end
player:GetPropertyChangedSignal("GameplayPaused"):Connect(onPauseStateChanged)

Débogage à l'exécution

Le moteur inclut plusieurs panneaux de débogage à l'écran qui peuvent être activés sur le client à l'aide de raccourcis clavier. Pour accéder aux informations de débogage de streaming :

  1. Ouvrez le superposition de débogage Résumé Réseau via ShiftCtrlF3 (Windows) ou ShiftF3 (Mac).
  2. Une fois la superposition de débogage ouverte, appuyez plusieurs fois sur Shift1 pour faire défiler les panneaux disponibles. Le quatrième panneau est la vue de débogage Streaming qui affiche des informations utiles à l'exécution :
    • Paramètres de streaming actifs
    • Régions actuellement chargées (diffusées)
    • Comportement et état de streaming

Une fois activées, des régions mises en surbrillance colorées apparaissent dans la vue 3D :

CouleurDescription
Moins de StreamingMinRadius
Supérieur ou égal à StreamingMinRadius et inférieur à StreamingTargetRadius
Égal à StreamingTargetRadius
Supérieur à StreamingTargetRadius
©2026 Société Roblox. Roblox, le logo Roblox et Powering Imagination font partie de nos marques déposées aux États-Unis et dans d'autres pays.