Class
ContentProvider
NotCreatableServiceNotReplicated
Service that is used to load content, or assets, into a game.
Service that loads content (assets) into a game.
Roblox servers stream all assets to the client at runtime: objects in the Workspace, mesh assets, texture assets, etc. Assets such as mesh visual data, textures, decals, and sounds are streamed in as required, regardless of whether Streaming is enabled.
In some cases, this behavior is undesirable, as it can lead to a delay before the content loads into the experience.
ContentProvider lets you preload assets into an experience using the
ContentProvider:PreloadAsync() method. You might want to display a
loading screen, preload critical assets, and only then allow the player into
the experience.
Best Practices for Preloading#
- Only preload essential assets, not the entire
Workspace. You might get occasional pop-in, but it decreases load times and generally doesn't disrupt the player experience. Assets that are good candidates for preloading include those required for the loading screen, the UI, or the starting area. - Let players skip the loading screen, or automatically skip it after a certain amount of time.
Properties 2#
BaseUrlstring | Used by the ContentProvider to download assets from the Roblox
website.ReadSafeReadOnlyNotReplicated |
RequestQueueSizeint | Gives the number of items in the ContentProvider request queue
that need to be downloaded.ReadSafeReadOnlyNotReplicated |
BaseUrl: string#
ReadOnlyNotReplicatedReadSafe
Used by the ContentProvider to download assets from the Roblox
website.
This URL points to a Roblox hosted website from which assets are downloaded and is pulled from the AppSettings.xml file, located in the version-hash folder.
It is possible to overwrite this property using the
ContentProvider:SetBaseUrl() function in the command bar; however,
this is not recommended and may cause asset loading issues.
RequestQueueSize: int#
ReadOnlyNotReplicatedReadSafe
Gives the number of items in the ContentProvider request queue
that need to be downloaded.
Items are added to the client's request queue when an asset is used for
the first time or ContentProvider:PreloadAsync() is called.
Developers are advised not to use RequestQueueSize to create loading bars. This is because the queue size can both increase and decrease over time as new assets are added and downloaded. Developers looking to display loading progress should load assets one at a time (see example below).
Methods 11#
| GetAssetFetchStatus | Gets the current AssetFetchStatus of the contentId provided. |
| GetAssetFetchStatusChangedSignal | A signal that fires when the AssetFetchStatus of the provided
content changes. |
| ListEncryptedAssets | Returns an array of the asset IDs that currently have a registered encryption key. |
| Preload | Queues an asset to be downloaded by the ContentProvider.Deprecated |
| PreloadAsync | Yields until all of the assets associated with the given
Instances have loaded.Yields |
| RegisterDefaultEncryptionKey | Registers a fallback encryption key used to decrypt any encrypted asset that doesn't have its own key registered. |
| RegisterDefaultSessionKey | Decrypts the provided session key and registers the result as the default encryption key. |
| RegisterEncryptedAsset | Registers an encryption key used to decrypt a specific encrypted asset. |
| RegisterSessionEncryptedAsset | Decrypts the provided session key and registers it as the encryption key for a specific asset. |
| UnregisterDefaultEncryptionKey | Clears the default encryption key previously set on the
ContentProvider. |
| UnregisterEncryptedAsset | Removes the encryption key registered for a specific asset. |
GetAssetFetchStatus(contentId: ContentId): AssetFetchStatus#
Gets the current AssetFetchStatus of the contentId provided. Use
GetAssetFetchStatusChangedSignal()
to listen for changes to this value.
| Name | Type | Default | Description |
|---|---|---|---|
contentId | ContentId | The ID of the content to fetch the status for. |
Returns
AssetFetchStatus— TheAssetFetchStatusof the content.
GetAssetFetchStatusChangedSignal(contentId: ContentId): RBXScriptSignal#
A signal that fires when the AssetFetchStatus of the provided
content changes. Connect to this signal by using a callback with one
argument of type AssetFetchStatus. This is particularly useful for
assets that might update themselves automatically like the thumbnail of a
user when they change clothes.
| Name | Type | Default | Description |
|---|---|---|---|
contentId | ContentId | The ID of the content to monitor for fetch status changes. |
Returns
RBXScriptSignal— AnRBXScriptSignalthat fires when theAssetFetchStatusof the given content changes.
ListEncryptedAssets(): Array#
Returns an array containing every asset ID that currently has an
encryption key registered on this ContentProvider, whether the key
was registered directly through
RegisterEncryptedAsset()
or through
RegisterSessionEncryptedAsset().
The default key set through
RegisterDefaultEncryptionKey()
is not included, because it isn't associated with any specific asset.
Returns
Array— An array of the asset IDs that currently have an encryption key registered on thisContentProvider.
Preload(contentId: ContentId): ()#
DeprecatedDeprecated
Deprecated. This item has been superseded by ContentProvider:PreloadAsync()
which should be used in all new work.
Usually, content is loaded only when it starts being used. That explains
why it often takes a moment for an image to appear in a GuiObject,
or a Mesh|mesh to appear in a part, or why a
sound doesn't play for the first time. All because the asset
has not yet finished loading. Preload is used to load this content
beforehand, so that it works instantly.
| Name | Type | Default | Description |
|---|---|---|---|
contentId | ContentId | The content URL of the asset to preload. |
Returns
()
PreloadAsync(contentIdList: Array, callbackFunction: Function = nil): ()#
Yields
Yields until all of the assets associated with the given
Instances have loaded. This can be used to pause a script
and not use content until it is certain that the content has been loaded
into the experience.
When called, the engine identifies links to content for each item in the
list. For any of the Instances which have properties that
define links to content, such as a Decal or a
Sound, the engine attempts to load these assets from Roblox.
For each requested asset, the callback function runs, indicating the
asset's final AssetFetchStatus.
If any of the assets fail to load, an error message appears in the output. The method itself will not error and it will continue executing until it has processed each requested instance.
Limitations#
SurfaceAppearance and MaterialVariant are not supported by
PreloadAsync() because these
objects rely on processed texture pack assets rather than directly loading
individual textures. Calling it on a SurfaceAppearance instance
will not do anything, but the associated textures will still be streamed
in during runtime.
If PreloadAsync is called on Instances that are not
currently visible, such as a Decal or an ImageLabel, the
Engine will download and store textures used by those Instances in its
disk cache. Because the Instances are not visible in
these cases, the Engine may reduce memory consumption by unloading the
textures after preloading them.
| Name | Type | Default | Description |
|---|---|---|---|
contentIdList | Array | An array of instances to load. | |
callbackFunction | Function | nil | The function called when each asset request completes. Returns the
content string and the asset's final
AssetFetchStatus. |
Returns
()
RegisterDefaultEncryptionKey(encryptionKey: string): ()#
Sets a fallback encryption key that the ContentProvider uses to
decrypt any encrypted asset that isn't matched by a key registered for a
specific asset through
RegisterEncryptedAsset().
When an asset is fetched, the engine first looks for a key registered for
that asset's ID; if none exists, it falls back to this default key.
| Name | Type | Default | Description |
|---|---|---|---|
encryptionKey | string | The key to use as the default for decrypting encrypted assets. |
Returns
()
RegisterDefaultSessionKey(sessionKey: string): ()#
Decrypts sessionKey using the session's cryptographic context and then
registers the decrypted result as the default encryption key, exactly as
RegisterDefaultEncryptionKey()
does. Use this variant when the key is delivered to the client in
session-encrypted form rather than as plaintext.
| Name | Type | Default | Description |
|---|---|---|---|
sessionKey | string | The session-encrypted key to decrypt and register as the default encryption key. |
Returns
()
RegisterEncryptedAsset(assetId: ContentId, encryptionKey: string): ()#
Associates encryptionKey with the given assetId so that, when the
ContentProvider fetches that asset, it uses the key to decrypt the
downloaded file. A key registered for a specific asset takes precedence
over the default key set through
RegisterDefaultEncryptionKey().
The method throws an error if assetId isn't a valid asset ID.
| Name | Type | Default | Description |
|---|---|---|---|
assetId | ContentId | The asset to associate the encryption key with. | |
encryptionKey | string | The key used to decrypt the specified asset. |
Returns
()
RegisterSessionEncryptedAsset(contentId: ContentId, sessionKey: string): ()#
Decrypts sessionKey using the session's cryptographic context and then
registers the decrypted result as the encryption key for contentId,
exactly as
RegisterEncryptedAsset()
does. Use this variant when the per-asset key is delivered to the client
in session-encrypted form rather than as plaintext.
| Name | Type | Default | Description |
|---|---|---|---|
contentId | ContentId | The asset to associate the decrypted key with. | |
sessionKey | string | The session-encrypted key to decrypt and register for the specified asset. |
Returns
()
UnregisterDefaultEncryptionKey(): ()#
Removes the default encryption key registered through
RegisterDefaultEncryptionKey(),
so that assets without a specifically registered key are no longer
decrypted with a fallback key. Keys registered for individual assets
through
RegisterEncryptedAsset()
are unaffected.
Returns
()
UnregisterEncryptedAsset(assetId: ContentId): ()#
Removes the encryption key associated with assetId by
RegisterEncryptedAsset(),
so the asset is no longer decrypted with that key. If no key is registered
for the asset, the call has no effect.
| Name | Type | Default | Description |
|---|---|---|---|
assetId | ContentId | The asset whose registered encryption key should be removed. |
Returns
()
Events 1#
| AssetFetchFailed | Fires when the ContentProvider fails to fetch an asset, passing
the asset's ID. |
AssetFetchFailed(assetId: ContentId)#
Fires when an asset requested through the ContentProvider fails to
be fetched, passing the content ID of the asset that failed.
| Name | Type | Default | Description |
|---|---|---|---|
assetId | ContentId | The content ID of the asset that failed to load. |
Inherited members#
Inherited from Instance 58
Properties (10)
Archivable, archivable, Capabilities, IsInSandbox, Name, Parent, PredictionMode, RobloxLocked, Sandboxed, UniqueId
Methods (39)
AddTag, children, ClearAllChildren, Clone, clone, Destroy, destroy, FindFirstAncestor, FindFirstAncestorOfClass, FindFirstAncestorWhichIsA, FindFirstChild, findFirstChild, FindFirstChildOfClass, FindFirstChildWhichIsA, FindFirstDescendant, GetActor, GetAttribute, GetAttributeChangedSignal, GetAttributes, GetChildren, getChildren, GetDebugId, GetDescendants, GetFullName, GetStyled, GetStyledPropertyChangedSignal, GetTags, HasTag, IsAncestorOf, IsDescendantOf, isDescendantOf, IsPropertyModified, QueryDescendants, Remove, remove, RemoveTag, ResetPropertyToDefault, SetAttribute, WaitForChild