ContentProvider

Afficher les obsolètes

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

Création impossible
Service
Non répliqué

Service qui charge du contenu (des ressources) dans un jeu.

Les serveurs Roblox diffusent toutes les ressources au client en temps d'exécution : objets dans l'espace de travail, ressources de maillage, ressources de texture, etc.Les ressources telles que les données visuelles en maillage, les textures, les décalcomanies et les sons sont diffusées comme requis, indépendamment du fait que Streaming soit activé ou non.

Dans certains cas, ce comportement n'est pas souhaitable, car il peut entraîner un retard avant que le contenu ne soit chargé dans l'expérience.

ContentProvider vous permet de précharger des ressources dans une expérience en utilisant la méthode ContentProvider:PreloadAsync().Vous pouvez vouloir afficher un écran de chargement, précharger des ressources critiques et n'autoriser le joueur à entrer dans l'expérience qu'après.

Meilleures pratiques pour le préchargement

  • Ne préchargez que les ressources essentielles, pas l'ensemble de Workspace.Vous pouvez obtenir des pop-ins occasionnels, mais cela réduit les temps de chargement et n'interrompt généralement pas l'expérience du joueur.Les ressources qui sont de bons candidats pour le préchargement incluent celles requises pour l'écran de chargement, l'interface utilisateur ou la zone de départ.
  • Laissez les joueurs sauter l'écran de chargement, ou le sauter automatiquement après un certain temps.

Échantillons de code

In this example a Decal and Sound are preloaded into a game. Once they have finished loading the script will print a message to the output.

ContentProvider

local ContentProvider = game:GetService("ContentProvider")
local LOGO_ID = "rbxassetid://658743164"
local PAGE_TURN_ID = "rbxassetid://12222076"
local decal = Instance.new("Decal")
decal.Texture = LOGO_ID
local sound = Instance.new("Sound")
sound.SoundId = PAGE_TURN_ID
local assets = { decal, sound }
ContentProvider:PreloadAsync(assets)
print("All assets loaded.")

Résumé

Propriétés

  • Lecture uniquement
    Non répliqué
    Lecture parallèle

    Utilisé par le ContentProvider pour télécharger des ressources sur le site Web Roblox.

  • Lecture uniquement
    Non répliqué
    Lecture parallèle

    Donne le nombre d'éléments dans la file d'attente de requêtes ContentProvider qui doivent être téléchargés.

Méthodes

Propriétés

BaseUrl

Lecture uniquement
Non répliqué
Lecture parallèle

Utilisé par le ContentProvider pour télécharger des ressources sur le site Web Roblox.

Cette URL pointe vers un site Web hébergé par Roblox à partir duquel des ressources sont téléchargées et sont extraites du fichier AppSettings.xml, situé dans le dossier version-hash.

Il est possible d'écraser cette propriété en utilisant la fonction ContentProvider:SetBaseUrl() dans la barre de commande ; cependant, cela n'est pas recommandé et peut causer des problèmes de chargement des ressources.

RequestQueueSize

Lecture uniquement
Non répliqué
Lecture parallèle

Donne le nombre d'éléments dans la file d'attente de requêtes ContentProvider qui doivent être téléchargés.

Les articles sont ajoutés à la file d'attente des demandes du client lorsqu'une ressource est utilisée pour la première fois ou ContentProvider:PreloadAsync() est appelée.

Il est conseillé aux développeurs de ne pas utiliser RequestQueueSize pour créer des barres de chargement.C'est parce que la taille de la file d'attente peut à la fois augmenter et diminuer au fil du temps à mesure que de nouveaux ressources sont ajoutées et téléchargées.Les développeurs qui souhaitent afficher la progression du chargement doivent charger les ressources une par une (voir exemple ci-dessous).

Échantillons de code

This code sample demonstrates how ContentProvider:PreloadAsync() can be used to create a simple loading bar in a game, by loading the assets one at a time.

ContentProvider Loading Bar

local ContentProvider = game:GetService("ContentProvider")
local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
local playerGui = localPlayer:WaitForChild("PlayerGui")
local screenGui = Instance.new("ScreenGui")
screenGui.Parent = playerGui
-- create a basic loading bar
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0.5, 0, 0.1, 0)
frame.Position = UDim2.new(0.5, 0, 0.5, 0)
frame.AnchorPoint = Vector2.new(0.5, 0.5)
frame.Parent = screenGui
local bar = Instance.new("Frame")
bar.Size = UDim2.new(0, 0, 1, 0)
bar.Position = UDim2.new(0, 0, 0, 0)
bar.BackgroundColor3 = Color3.new(0, 0, 1)
bar.Parent = frame
local sound = Instance.new("Sound")
sound.SoundId = "rbxassetid://9120386436"
local sound2 = Instance.new("Sound")
sound2.SoundId = "rbxassetid://9120385974"
local assets = {
sound,
sound2,
}
task.wait(3)
for i = 1, #assets do
local asset = assets[i]
ContentProvider:PreloadAsync({ asset }) -- 1 at a time, yields
local progress = i / #assets
bar.Size = UDim2.new(progress, 0, 1, 0)
end
print("loading done")

Méthodes

GetAssetFetchStatus

Obtient le Enum.AssetFetchStatus actuel du contentId fourni. Utilisez GetAssetFetchStatusChangedSignal() pour écouter les modifications de cette valeur.

Paramètres

contentId: ContentId

L'ID du contenu à récupérer pour obtenir le statut.

Valeur par défaut : ""

Retours

Échantillons de code

Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.

Monitoring AssetFetchStatus

local ContentProvider = game:GetService("ContentProvider")
-- An example asset to load
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Output the current AssetFetchStatus of the asset
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Listen for updates
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Trigger the asset to preload
local function onAssetRequestComplete(contentId: string, assetFetchStatus: Enum.AssetFetchStatus)
print(`Preload status {contentId}: {assetFetchStatus.Name}`)
end
ContentProvider:PreloadAsync({ exampleAsset }, onAssetRequestComplete)

GetAssetFetchStatusChangedSignal

Un signal qui se déclenche lorsque le Enum.AssetFetchStatus du contenu fourni change.Connectez-vous à ce signal en utilisant un rappel avec un argument de type Enum.AssetFetchStatus .Cela est particulièrement utile pour les ressources qui pourraient se mettre à jour automatiquement comme la miniature d'un utilisateur lorsqu'il change de vêtements.

Paramètres

contentId: ContentId
Valeur par défaut : ""

Retours

Échantillons de code

Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.

Monitoring AssetFetchStatus

local ContentProvider = game:GetService("ContentProvider")
-- An example asset to load
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Output the current AssetFetchStatus of the asset
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Listen for updates
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Trigger the asset to preload
local function onAssetRequestComplete(contentId: string, assetFetchStatus: Enum.AssetFetchStatus)
print(`Preload status {contentId}: {assetFetchStatus.Name}`)
end
ContentProvider:PreloadAsync({ exampleAsset }, onAssetRequestComplete)

ListEncryptedAssets


Retours

RegisterDefaultEncryptionKey

()

Paramètres

encryptionKey: string
Valeur par défaut : ""

Retours

()

RegisterDefaultSessionKey

()

Paramètres

sessionKey: string
Valeur par défaut : ""

Retours

()

RegisterEncryptedAsset

()

Paramètres

assetId: ContentId
Valeur par défaut : ""
encryptionKey: string
Valeur par défaut : ""

Retours

()

RegisterSessionEncryptedAsset

()

Paramètres

contentId: ContentId
Valeur par défaut : ""
sessionKey: string
Valeur par défaut : ""

Retours

()

UnregisterDefaultEncryptionKey

()

Retours

()

UnregisterEncryptedAsset

()

Paramètres

assetId: ContentId
Valeur par défaut : ""

Retours

()

PreloadAsync

()
Rendement

Rendement jusqu'à ce que toutes les ressources associées à la donnée donnée Instances aient été chargées.Cela peut être utilisé pour mettre en pause un script et ne pas utiliser le contenu jusqu'à ce qu'il soit certain que le contenu a été chargé dans l'expérience.

Lorsqu'il est appelé, le moteur identifie les liens vers le contenu pour chaque élément de la liste.Pour tout des Instances qui ont des propriétés qui définissent des liens vers le contenu, comme un Decal ou un Sound, le moteur essaie de charger ces ressources à partir de Roblox.Pour chaque ressource demandée, la fonction de rappel s'exécute, indiquant la ressource finale Enum.AssetFetchStatus .

Si l'une des ressources ne se chargerpas, un message d'erreur apparaît dans la sortie.La méthode elle-même ne fera pas d'erreur et elle continuera à s'exécuter jusqu'à ce qu'elle ait traité chaque instance demandée.

Limites

SurfaceAppearance et MaterialVariant ne sont pas pris en charge par PreloadAsync() car ces objets dépendent des ressources de texture traitées plutôt que de charger directement des textures individuelles.L'appeler sur une instance SurfaceAppearance ne fera rien, mais les textures associées seront toujours diffusées en cours d'temps d'exécution.

Paramètres

contentIdList: Array

Un ensemble d'instances à charger.

Valeur par défaut : ""
callbackFunction: function

La fonction appelée lorsque chaque demande d'actif est terminée. Renvoie la chaîne content et la fin de l'contenuEnum.AssetFetchStatus.

Valeur par défaut : "nil"

Retours

()

Échantillons de code

In this code sample, a sound and a texture are preloaded using Sound and Decal instances.

Preloading Assets

local ContentProvider = game:GetService("ContentProvider")
local sound = Instance.new("Sound")
sound.SoundId = "rbxassetid://9120386436"
local decal = Instance.new("Decal")
decal.Texture = "rbxassetid://5447528495"
local assets = {
decal,
sound,
}
-- This will be hit as each asset resolves
local callback = function(assetId, assetFetchStatus)
print("PreloadAsync() resolved asset ID:", assetId)
print("PreloadAsync() final AssetFetchStatus:", assetFetchStatus)
end
-- Preload the content and time it
local startTime = os.clock()
ContentProvider:PreloadAsync(assets, callback)
local deltaTime = os.clock() - startTime
print(("Preloading complete, took %.2f seconds"):format(deltaTime))

Évènements

AssetFetchFailed

Paramètres

assetId: ContentId