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 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

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 du site Web de Roblox.

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

    Donne le nombre d'objets dans la file d'attente de 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 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

Lecture uniquement
Non répliqué
Lecture parallèle

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

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 statut actuel Enum.AssetFetchStatus du contentId fourni. Utilisez GetAssetFetchStatusChangedSignal() pour écouter les modifications de cette valeur.

Paramètres

contentId: ContentId

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


Retours

Le Amount.Requested du contenu.

Échantillons de code

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 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

contentId: ContentId

Retours

Échantillons de code

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

void

Paramètres

encryptionKey: string

Retours

void

RegisterDefaultSessionKey

void

Paramètres

sessionKey: string

Retours

void

RegisterEncryptedAsset

void

Paramètres

assetId: ContentId
encryptionKey: string

Retours

void

RegisterSessionEncryptedAsset

void

Paramètres

contentId: ContentId
sessionKey: string

Retours

void

UnregisterDefaultEncryptionKey

void

Retours

void

UnregisterEncryptedAsset

void

Paramètres

assetId: ContentId

Retours

void

PreloadAsync

void
Rendement

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

contentIdList: Array

Une tableau de valeurs d'instances ou de chaînes de contenu (pour les images).

callbackFunction: function

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.

Valeur par défaut : "nil"

Retours

void

Échantillons de code

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