ContentProvider
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
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.
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
Utilisé par le ContentProvider pour télécharger des ressources sur le site Web Roblox.
Donne le nombre d'éléments dans la file d'attente de requêtes ContentProvider qui doivent être téléchargés.
Méthodes
Obtient le Enum.AssetFetchStatus actuel du contentId fourni.
Un signal qui se déclenche lorsque le Enum.AssetFetchStatus du contenu fourni change.
Rendement jusqu'à ce que toutes les ressources associées à la donnée donnée Instances aient été chargées.
Évènements
Propriétés
BaseUrl
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
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.
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
L'ID du contenu à récupérer pour obtenir le statut.
Retours
Le Enum.AssetFetchStatus du contenu.
Échantillons de code
Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.
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
Retours
Échantillons de code
Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.
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)
RegisterEncryptedAsset
Paramètres
Retours
RegisterSessionEncryptedAsset
Paramètres
Retours
UnregisterDefaultEncryptionKey
Retours
UnregisterEncryptedAsset
Paramètres
Retours
PreloadAsync
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
Un ensemble d'instances à charger.
La fonction appelée lorsque chaque demande d'actif est terminée. Renvoie la chaîne content et la fin de l'contenuEnum.AssetFetchStatus.
Retours
Échantillons de code
In this code sample, a sound and a texture are preloaded using Sound and Decal instances.
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))