ContentProvider
*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.
Serviço que carrega conteúdo (ativos) em um jogo.
Os servidores do Roblox transmitem todos os recursos ao cliente em tempo de execução: objetos no Workspacede Trabalho, recursos de malha, recursos de textura, etc.Recursos como dados visuais em malha, texturas, decalques e sons são transmitidos conforme necessário, independentemente de se o Streaming estiver ativado.
Em alguns casos, esse comportamento é indesejável, pois pode levar a um atraso antes que o conteúdo carregue na experiência.
ContentProvider Permite que você carregue recursos em uma experiência usando o método ContentProvider:PreloadAsync().Você pode querer exibir uma tela de carregamento, pré-carregar recursos críticos e, somente então, permitir que o jogador entre na experiência.
Melhores Práticas para Pré-carregamento
- Apenas pré-carregue recursos essenciais, não o inteiro Workspace.Você pode receber pop-ins ocasionais, mas isso diminui os tempos de carregamento e geralmente não interrompe a experiência do jogador.Recursos que são bons candidatos para pré-carregamento incluem aqueles necessários para a tela de carregamento, a interface do usuário ou a área de início.
- Deixe os jogadores pular a tela de carregamento ou pulem automaticamente após um determinado período de tempo.
Amostras de código
In this example a Decal and Sound are preloaded into a game. Once they have finished loading the script will print a message to the output.
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.")
Resumo
Propriedades
Usado pelo ContentProvider para baixar recursos do site do Roblox.
Dá o número de itens na fila de solicitações ContentProvider que precisam ser baixados.
Métodos
Obtém o atual Enum.AssetFetchStatus da contentId fornecida.
Um sinal que dispara quando o Enum.AssetFetchStatus do conteúdo fornecido muda.
Produz até que todos os recursos associados ao dado Instances tenham sido carregados.
Eventos
Propriedades
BaseUrl
Usado pelo ContentProvider para baixar recursos do site do Roblox.
Este URL aponta para um site hospedado do Roblox a partir do qual recursos são baixados e são extraídos do arquivo AppSettings.xml, localizado na pasta de hash de versão.
É possível substituir essa propriedade usando a função ContentProvider:SetBaseUrl() na barra de comando; no entanto, isso não é recomendado e pode causar problemas de carregamento de recursos.
RequestQueueSize
Dá o número de itens na fila de solicitações ContentProvider que precisam ser baixados.
Itens são adicionados à fila de solicitações do cliente quando um recurso é usado pela primeira vez ou ContentProvider:PreloadAsync().
Aconselha-se aos desenvolvedores que não usem o RequestQueueSize para criar barras de carregamento.Isso ocorre porque o tamanho da fila pode aumentar e diminuir ao longo do tempo à medida que novos recursos são adicionados e baixados.Desenvolvedores que desejam exibir o progresso de carregamento devem carregar recursos um por vez (veja exemplo abaixo).
Amostras 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
Obtém o atual Enum.AssetFetchStatus da contentId fornecida. Use GetAssetFetchStatusChangedSignal() para ouvir mudanças neste valor.
Parâmetros
O ID do conteúdo para obter o status.
Devolução
O Enum.AssetFetchStatus da do conteúdo.
Amostras de código
Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.
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
Um sinal que dispara quando o Enum.AssetFetchStatus do conteúdo fornecido muda.Conecte-se a este sinal usando um retorno de chamada com um argumento do tipo Enum.AssetFetchStatus .Isso é particularmente útil para recursos que podem se atualizar automaticamente, como a miniatura de um usuário quando ele muda de roupa.
Parâmetros
Devolução
Amostras de código
Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.
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)
RegisterEncryptedAsset
Parâmetros
Devolução
RegisterSessionEncryptedAsset
Parâmetros
Devolução
UnregisterDefaultEncryptionKey
Devolução
UnregisterEncryptedAsset
Parâmetros
Devolução
PreloadAsync
Produz até que todos os recursos associados ao dado Instances tenham sido carregados.Isso pode ser usado para pausar um script e não usar conteúdo até que seja certo que o conteúdo foi carregado na experiência.
Ao ser chamado, o motor identifica links para conteúdo para cada item na lista.Para qualquer um dos Instances que tem propriedades que definem links para conteúdo, como um Decal ou um Sound, o motor tenta carregar esses recursos do Roblox.Para cada ativosolicitado, a função de retorno é executada, indicando o recurso final Enum.AssetFetchStatus .
Se algum dos recursos não carregar, uma mensagem de erro aparece na saída.O próprio método não irá errar e continuará a executar até ter processado cada instância solicitada.
Limitações
SurfaceAppearance e MaterialVariant não são suportados por PreloadAsync() porque esses objetos dependem de recursos de pacote de textura processados, em vez de carregar diretamente texturas individuais.Chamá-lo em uma instância SurfaceAppearance não fará nada, mas as texturas associadas ainda serão transmitidas durante a tempo de execução.
Parâmetros
Um conjunto de instâncias para carregar.
A função chamada quando cada solicitação de recurso é concluída. Retorna a string content e o ativofinal Enum.AssetFetchStatus da entidade.
Devolução
Amostras de código
Neste exemplo de código, um som e uma textura são pré-carregados usando Sound e Decal instâncias.
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,
}
-- Isso será atingido à medida que cada recurso se resolve
local callback = function(assetId, assetFetchStatus)
print("PreloadAsync() resolved asset ID:", assetId)
print("PreloadAsync() final AssetFetchStatus:", assetFetchStatus)
end
-- Pré-carregue o conteúdo e o tempo
local startTime = os.clock()
ContentProvider:PreloadAsync(assets, callback)
local deltaTime = os.clock() - startTime
print(("Preloading complete, took %.2f seconds"):format(deltaTime))