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 diffuser tous les ressources au client au moment de l'temps d'exécution: les objets dans le Workspace, les ressources de maillage, les ressources de texture, etc. Les ressources telles que les données visuelles de maillage, les textures, les décalques et les sons sont diffusées en tant que requis, indépendamment de l'activation de Streaming.
Dans certains cas, ce comportement est indésirable, car il peut entraîner un délai avant que le contenu se charge dans l'expérience.
ContentProvider vous permet de précharger des ressources dans une expérience en utilisant la méthode ContentProvider:PreloadAsync(). Vous voudrez peut-être afficher une page de chargement, précharger des ressources critiques et seulement alors permettre au joueur dans l'expérience.
Meilleures pratiques pour le préchargement
- Ne prélargez que les ressources essentielles, non le tout l'espace de travail. Vous pourriez obtenir des pop-in occasionnels, mais cela réduit les temps de chargement et n'affecte généralement pas l'expérience de l'utilisateur. Les ressources qui sont de bonnes candidates pour le préchargement incluent celles requises pour le panneau de chargement, l'interface utilisateur ou la zone de départ.
- Permettre aux joueurs de sauter l'écran de chargement, ou de le sauter automatiquement après une certaine durée.
Échantillons de code
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 du site Web de Roblox.
Donne le nombre d'objets dans la file d'attente de ContentProvider qui doivent être téléchargés.
Méthodes
Obtient le statut actuel de Enum.AssetFetchStatus de la contentId fournie.
Un signal qui se déclenche lorsque le Enum.AssetFetchStatus de la ressource fournie change.
Renvoie jusqu'à ce que tous les ressources associées avec le donné Instances aient été chargées.
Évènements
Propriétés
BaseUrl
Utilisé par le ContentProvider pour télécharger des ressources du site Web de Roblox.
Cette URL pointe à un site Web hébergé par Roblox à partir duquel des ressources sont téléchargées et sont retirées 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 commandes ; cependant, ceci n'est pas recommandé et peut causer des problèmes de chargement des ressources.
RequestQueueSize
Donne le nombre d'objets dans la file d'attente de ContentProvider qui doivent être téléchargés.
Les articles sont ajoutés à la file d'attente de la demande du client lorsque l'objet est utilisé pour la première fois ou que ContentProvider:PreloadAsync() est appelé.
Les développeurs ne sont pas conseillés d'utiliser RequestQueueSize pour créer des barres de chargement. C'est parce que la taille de la file d'attente peut augmenter et diminuer au fil du temps à mesure que de nouvelles ressources sont ajoutées et téléchargées. Les développeurs qui affichent le chargement progressant devraient charger des ressources un à la fois (voir exemple ci-dessous).
Échantillons de code
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 statut actuel Enum.AssetFetchStatus du contentId fourni. Utilisez GetAssetFetchStatusChangedSignal() pour écouter les modifications de cette valeur.
Paramètres
L'ID du contenu pour récupérer le statut.
Retours
Le Amount.Requested du contenu.
Échantillons de code
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 de contenu fourni change.Connectez-vous à ce signal en utilisant un rappel avec un argument de type Enum.AssetFetchStatus . Ceci est particulièrement utile pour les ressources qui peuvent se mettre à jour automatiquement comme la vignette d'un utilisateur lorsqu'il change de vêtements.
Paramètres
Retours
Échantillons de code
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)
UnregisterDefaultEncryptionKey
Retours
UnregisterEncryptedAsset
Paramètres
Retours
PreloadAsync
Produit jusqu'à ce que tous les ressources associées avec le donné Instances ont été chargées. Cela peut être utilisé expérience
Lorsqu'elle est appelée, le moteur identifie les liens vers le contenu pour chaque élément de la liste. Pour n'importe lequel des Instances qui ont des propriétés qui définissent des liens vers le contenu, tels qu'un Decal ou un Class.Sound|Sound
Cette méthode peut également prendre une liste de chaînes d'ID de contenu, mais ces chaînes doivent correspondre à image les ressources. Essayer de charger des ressources non image à l'aide des chaînes d'ID de contenu correspondra à l'échec.
Si l'une des ressources ne se chargerpas, une message d'erreur apparaît dans la sortie. La méthode elle-même ne sera pas en erreur et elle s'exécutera toujours jusqu'à ce qu'elle ait traité chaque instance ou ID de ressource demandé.
Paramètres
Une tableau de valeurs d'instances ou de chaînes de contenu (pour les images).
La fonction appelée lorsque chaque demande d'assets est terminée. Retourne la chaîne content et le statut final de l'asset, Enum.AssetFetchStatus.
Retours
Échantillons de code
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))