Diffusion des instances

*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, la diffusion des instances permet au moteur Roblox de charger et de 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 connexion 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
    — De meilleurs taux de fréquence image et performances, 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'ils sont configurés, les modèles éloignés, les avatars de plateforme et le terrain restent visibles même s'ils ne sont pas diffusés aux clients, gardant le jeu optimisé sans sacrifier entièrement les visuels d'arrière-plan.

La diffusion des instances est contrôlée 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 de diffusion et les fonctionnalités 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 à la diffusion. Par exemple, placer un modèle atomique sous ReplicatedStorage ne garantit pas la réplication atomique.

Diffusion

Lorsque un joueur rejoint un jeu avec la diffusion des instances activée :

  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 réglé sur Amélioré

    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 diffusion du jeu, de la position du joueur, des performances de l'appareil client et d'autres conditions.

Diffusion de sortie

Pendant le gameplay, un client peut supprimer des régions de BaseParts du Workspace du joueur selon le comportement défini par Workspace.StreamOutBehavior. Le processus commence par les régions les plus éloignées des focales de réplication et se rapproche si nécessaire. Les régions à l'intérieur du rayon 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 de sortie à 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, ce qui aide à garantir des mises à jour physiques cohérentes sur les clients. La seule exception est lorsque l'assemblage est ancré, auquel cas seuls les BaseParts à l'intérieur du rayon de diffusion sont diffusés en même temps que leurs Constraints et Attachments associés.

Les assemblages ne diffusent pas tant que toutes leurs BaseParts ne sont pas éligibles à la diffusion.

Propriétés de diffusion

Les propriétés suivantes contrôlent comment la diffusion des instances 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.
ModelStreamingBehaviorContrôle comment les modèles Nonatomiques (par défaut) sont diffusés.

RECOMMANDÉ
Utilisez Amélioré pour activer la diffusion la plus efficace pour les Models avec des descendants BasePart.
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 pauses inutiles ou trop fréquentes. Vous pouvez également personnaliser l'écran de pause.
StreamingMinRadiusCette propriété indique le rayon autour des focales de réplication dans lequel les instances sont diffusées avec la plus haute priorité. Une prudence doit être exercée lors de l'augmentation de la valeur par défaut, car cela nécessitera plus de mémoire et 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 d'entrée de gamme.
StreamingTargetRadiusCette propriété contrôle la distance maximale à partir des focales de réplication dans laquelle les instances sont diffusées. Notez que le moteur peut garder des instances déjà chargées au-delà du rayon cible, en fonction de la mémoire.

Un rayon d'objectif 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 aussi 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 établir un bon équilibre entre 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 de sortie selon la valeur de Enum.StreamOutBehavior. Si défini 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. S'il est défini sur Opportunistic, les régions au-delà de StreamingTargetRadius peuvent être supprimées côté client même en l'absence 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 activement les déchets, ce qui réduit considérablement l'utilisation de la mémoire et aide à prévenir les plantages par manque de mémoire.

Focale de réplication

Par défaut, la diffusion se produit autour de 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 foyers de réplication supplémentaires grâce à Player:AddReplicationFocus() et Player:RemoveReplicationFocus() pour activer dynamiquement la diffusion dans plusieurs zones du jeu.

La simulation physique côté client, y compris les prédictions et resimulations lorsque l'autorité du serveur est implémentée, ne se produit que dans les zones diffusées, même pour des instances créées localement et pour des instances Persistant. Si vous avez des instances que vous souhaitez continuer à simuler même lorsqu'elles sont loin du personnage, créez un point de focalisation de réplication près de ces instances.

Contrôles de diffusion des modèles

Pour éviter des problèmes de diffusion au niveau de chaque modèle et minimiser l'utilisation de WaitForChild(), vous pouvez personnaliser la façon dont les Models et leurs descendants se diffusent via la propriété ModelStreamingMode.

Nonatomique

Par défaut, les modèles sont Nonatomique et se diffusent en fonction de la valeur de Workspace.ModelStreamingBehavior, qu'elle soit définie sur Héritage (par défaut) ou Amélioré.

Héritage

Lorsque Workspace.ModelStreamingBehavior est défini sur Héritage (par défaut), le conteneur Model et ses descendants nonBasePart 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 Amélioré, le comportement de diffusion des modèles varie selon que le modèle contient ou non des descendants BasePart :

  • Un modèle avec des descendants BasePart se diffuse en uniquement lorsqu'un d'eux de ses descendants BasePart est éligible à la diffusion. À ce moment, le modèle et le BasePart éligible se diffusent, ainsi que les descendants nonBasePart du modèle.

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

  • Un modèle sans descendants BasePart, tel qu'un modèle utilisé simplement comme "conteneur" pour des instances non‑BasePart comme des scripts, se réplique au client peu après que le joueur ait rejoint. Ce type de modèle est exempt de diffusion de sortie à moins qu'il ne devienne un descendant d'un BasePart.

Atomique

Si un Model est défini sur Atomique, tous ses descendants initiaux sont diffusés ensemble lorsqu'un descendant BasePart est éligible à être diffusé. En conséquence, un script côté client qui doit accéder à des instances à l'intérieur du modèle devra 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 ne sera diffusé que lorsque tous ses composants descendants seront éligibles pour la diffusion, moment auquel le modèle entier se diffusera également.

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

Persistant

Les modèles Persistant ne sont pas soumis à la diffusion normale. Ils sont envoyés en tant qu'unité atomique complète peu après que le joueur ait rejoint 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é la diffusion dans un script côté client, vous devez attendre que l'événement PersistentLoaded se déclenche.

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

PersistantParJoueur

Les modèles définis sur PersistantParJoueur se comportent de la même manière que les modèles Persistant pour les joueurs qui ont été ajoutés à l'aide de Model:AddPersistentPlayer(). Pour les autres joueurs, le comportement est identique à celui des modèles Atomique. Vous pouvez annuler la persistance d'un modèle par joueur via Model:RemovePersistentPlayer().

Personnalisation de l'écran de pause

En supposant que Workspace.StreamingIntegrityMode est réglé sur PauseOutsideLoadedArea recommandé, le jeu sera mis 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 GUI personnalisée.

LocalScript

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

Débogage à l'exécution

Le moteur comprend 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 diffusion :

  1. Ouvrez la 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 parcourir 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 diffusion actifs
    • Régions actuellement chargées (diffusées)
    • Comportement et état de diffusion

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

CouleurDescription
Moins que 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.