ContentProvider
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
Servicio que carga contenido (activos) en un juego.
Los servidores de Roblox transmiten todos los recursos al cliente en tiempo de ejecución: objetos en el espacio de trabajo, recursos de malla, recursos de textura, etc.Los recursos como los datos visuales de malla, las texturas, las decoraciones y los sonidos se transmiten según lo requerido, independientemente de si Streaming está habilitado.
En algunos casos, este comportamiento no es deseable, ya que puede conducir a un retraso antes de que el contenido se cargue en la experiencia.
ContentProvider te permite precargar recursos en una experiencia usando el método ContentProvider:PreloadAsync().Quizás quieras mostrar una pantalla de carga, precargar recursos críticos y solo entonces permitir que el jugador entre en la experiencia.
Mejores prácticas para la precarga
- Solo preload los recursos esenciales, no todo el Workspace .Puede obtener un pop-in ocasional, pero reduce los tiempos de carga y generalmente no interrumpe la experiencia del jugador.Los activos que son buenos candidatos para la precarga incluyen los requeridos para la pantalla de carga, la interfaz de usuario o la zona de inicio.
- Deje que los jugadores omitan la pantalla de carga o la omitan automáticamente después de una cierta cantidad de tiempo.
Muestras de código
En este ejemplo, una imagen y un sonido se prestan a un juego. Una vez que terminen de cargar el script, imprimirá un mensaje en la salida.
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.")
Resumen
Propiedades
Utilizado por el ContentProvider para descargar recursos del sitio web de Roblox.
Da el número de artículos en la cola de solicitudes ContentProvider que deben descargarse.
Métodos
Obtiene el actual Enum.AssetFetchStatus de los contentId proporcionados.
Una señal que se activa cuando el Enum.AssetFetchStatus de los contenidos proporcionados cambia.
Produce hasta que todos los recursos asociados con el dado Instances se hayan cargado.
Eventos
Propiedades
BaseUrl
Utilizado por el ContentProvider para descargar recursos del sitio web de Roblox.
Esta URL apunta a un sitio web alojado de Roblox desde el cual se descargan recursos y se extrae del archivo AppSettings.xml, ubicado en la carpeta de hash de versión.
Es posible reemplazar esta propiedad usando la función ContentProvider:SetBaseUrl() en la barra de comandos; sin embargo, esto no se recomienda y puede causar problemas de carga de activos.
RequestQueueSize
Da el número de artículos en la cola de solicitudes ContentProvider que deben descargarse.
Los elementos se agregan a la cola de solicitudes del cliente cuando se usa un activo por primera vez o se llama ContentProvider:PreloadAsync().
A los desarrolladores se les aconseja que no utilicen RequestQueueSize para crear barras de carga.Esto se debe a que el tamaño de la cola puede aumentar y disminuir con el tiempo a medida que se agreguen y descarguen nuevos recursos.Los desarrolladores que buscan mostrar el progreso de carga deben cargar los recursos uno a la vez (ver ejemplo a continuación).
Muestras de código
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étodos
GetAssetFetchStatus
Obtiene el actual Enum.AssetFetchStatus de la contentId proporcionada. Usa GetAssetFetchStatusChangedSignal() para escuchar cambios a este valor.
Parámetros
El ID del contenido para recuperar el estado.
Devuelve
El Enum.AssetFetchStatus de los contenidos.
Muestras de código
Recupera el inicial Enum.AssetFetchStatus de un activo y escucha las actualizaciones futuras.
local ContentProvider = game:GetService("ContentProvider")
-- Un ejemplo de activo para cargar
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Exponer el estado actual de AssetFetch de la entidad
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Escuchar actualizaciones
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Activar el recurso para precargar
local function onAssetRequestComplete(contentId: string, assetFetchStatus: Enum.AssetFetchStatus)
print(`Preload status {contentId}: {assetFetchStatus.Name}`)
end
ContentProvider:PreloadAsync({ exampleAsset }, onAssetRequestComplete)
GetAssetFetchStatusChangedSignal
Una señal que se activa cuando el Enum.AssetFetchStatus de los contenidos proporcionados cambia.Conecte a esta señal usando una llamada de devolución con un argumento de tipo Enum.AssetFetchStatus .Esto es particularmente útil para los activos que podrían actualizarse automáticamente como la miniatura de un usuario cuando cambia de ropa.
Parámetros
Devuelve
Muestras de código
Recupera el inicial Enum.AssetFetchStatus de un activo y escucha las actualizaciones futuras.
local ContentProvider = game:GetService("ContentProvider")
-- Un ejemplo de activo para cargar
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Exponer el estado actual de AssetFetch de la entidad
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Escuchar actualizaciones
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Activar el recurso para precargar
local function onAssetRequestComplete(contentId: string, assetFetchStatus: Enum.AssetFetchStatus)
print(`Preload status {contentId}: {assetFetchStatus.Name}`)
end
ContentProvider:PreloadAsync({ exampleAsset }, onAssetRequestComplete)
RegisterEncryptedAsset
Parámetros
Devuelve
RegisterSessionEncryptedAsset
Parámetros
Devuelve
UnregisterDefaultEncryptionKey
Devuelve
UnregisterEncryptedAsset
Parámetros
Devuelve
PreloadAsync
Produce hasta que todos los recursos asociados con el dado Instances se hayan cargado.Esto se puede usar para pausar un script y no usar el contenido hasta que se confirme que el contenido se ha cargado en la experiencia.
Cuando se llama, el motor identifica los enlaces a contenido para cada elemento de la lista.Para cualquiera de los Instances que tengan propiedades que definan enlaces a contenido, como un Decal o un Sound, el motor intenta cargar estos recursos de Roblox.Para cada activo solicitado, se ejecuta la función de llamada de devolución, que indica el activo final Enum.AssetFetchStatus .
Si algún recurso no se cargar, aparece un mensaje de error en la Salida.El propio método no fallará y continuará ejecutándose hasta que haya procesado cada instancia solicitada.
Limitaciones
SurfaceAppearance y MaterialVariant no son compatibles con PreloadAsync() porque estos objetos dependen de los recursos de paquete de textura procesados en lugar de cargar directamente texturas individuales.Llamarlo en una instancia SurfaceAppearance no hará nada, pero las texturas asociadas aún se transmitirán durante el tiempo de ejecución.
Parámetros
Un array de instancias para cargar.
La función llamada cuando cada solicitud de activo se completa. Devuelve la cadena content y el recursofinal Enum.AssetFetchStatus.
Devuelve
Muestras de código
En este ejemplo de código, un sonido y una textura se prestan usando Sound y Decal instancias.
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,
}
-- Esto se golpeará cuando cada activo se resuelva
local callback = function(assetId, assetFetchStatus)
print("PreloadAsync() resolved asset ID:", assetId)
print("PreloadAsync() final AssetFetchStatus:", assetFetchStatus)
end
-- Preajustar el contenido y el tiempo
local startTime = os.clock()
ContentProvider:PreloadAsync(assets, callback)
local deltaTime = os.clock() - startTime
print(("Preloading complete, took %.2f seconds"):format(deltaTime))