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 el contenido (los recursos) en un juego.
Los servidores de Roblox transmiten todos los recursos al cliente en tiempo de ejecución: objetos en el espacio de trabajo, imágenes en malla, recursos de textura, etc. Los recursos, como los datos visuales de malla, las texturas, las calcomanías y los sonidos, se transmiten en función de lo requerido, independientemente de si se habilita Transmisión o no.
En algunos casos, este comportamiento no es deseable, ya que puede causar un retraso antes de que el contenido se cargue en la experiencia.
ContentProvider le permite previsualizar los elementos de una experiencia con el método ContentProvider:PreloadAsync(). Es posible que desee mostrar una pantalla de carga, previsualizar los elementos críticos y solo entonces permitir que el jugador ingrese a la experiencia.
Mejores prácticas para precomprimir
- Solo precargue los elementos esenciales, no el espacio de trabajo entero. Puedes obtener pop-in ocasionales, pero reduce los tiempos de carga y generalmente no molesta la experiencia del jugador. Los elementos que son buenos candidatos para precargar incluyen los requeridos para la pantalla de carga, la interfaz de usuario o la zona de inicio.
- Deje que los jugadores se salten la pantalla de carga, o salten automáticamente después de un cierto tiempo.
Muestras de código
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
Usado por el ContentProvider para descargar recursos del sitio web de Roblox.
Da el número de artículos en la ContentProvider solicitud de cola que necesita ser descargado.
Métodos
Obtiene el estado actual de Enum.AssetFetchStatus de la contentId proporcionada.
Una señal que se activa cuando el Enum.AssetFetchStatus de los elementos proporcionados cambia.
Sigue hasta que todos los recursos asociados con el Instances cargado.
Eventos
Propiedades
BaseUrl
Usado por el ContentProvider para descargar recursos del sitio web de Roblox.
Esta URL apunta a un sitio web de Roblox alojado en el que se descargan y se extraen los recursos del archivo AppSettings.xml, ubicado en la carpeta de archivos de versión.
Es posible sobrescribir 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 ContentProvider solicitud de cola que necesita ser descargado.
Los elementos se agregan a la cola de solicitudes del cliente cuando se usa un activo por primera vez o ContentProvider:PreloadAsync() es llamado.
A los desarrolladores no se recomienda usar 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 agregan y se descargan nuevos recursos. Los desarrolladores que buscan mostrar el progreso de la carga deben cargar recursos uno a la vez (ver ejemplo a continuación).
Muestras de código
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 estado actual de Enum.AssetFetchStatus de contentId proporcionado. Usa GetAssetFetchStatusChangedSignal() para escuchar cambios en este valor.
Parámetros
La ID de la información para recuperar el estado.
Devuelve
El Enum.AssetFetchStatus del contenido.
Muestras de código
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
Una señal que se activa cuando el estado de Enum.AssetFetchStatus de la información proporcionada cambia. Conectarse a esta señal usando un retorno de llamada con un argumento de tipo Enum.AssetFetchStatus . Esto es particularmente útil para las imágenes de miniatura de un usuario cuando cambia de ropa.
Parámetros
Devuelve
Muestras de código
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
Devuelve
UnregisterEncryptedAsset
Parámetros
Devuelve
PreloadAsync
Suspensiones hasta que se hayan cargado todos los recursos asociados con el Instances dado. Esto se puede usar para pausar un script y no usar el contenido hasta que se asegure de que el contenido se ha cargado en la experiencia.
Cuando se llama, el motor identifica enlaces a contenido para cada artículo en la lista. Para cualquier de los Instances que tienen propiedades que definen enlaces a contenido, como un Decal o un Sound, el motor intenta cargar estas herramientas desde Roblox
Este método también puede tomar una lista de ID de contenido, sin embargo, estas cadenas deben coincidir con imágenes assets. Intenta cargar no-image assets a través del uso de sus cadenas de ID de contenido resultará en el fracaso.
Si alguno de los recursos no se cargar, se muestra un mensaje de error en la Salida. El método en sí mismo no fallará y continuará ejecutando hasta que haya procesado cada instancia o ID de recursos solicitados.
Parámetros
Un arreglo de instancias o cadenas de ID de contenido (para las imágenes) para cargar.
La función se llama cuando cada solicitud de activo se complete. Re返 el content ст링 y el estado final recurso's Enum.AssetFetchStatus .
Devuelve
Muestras de código
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))