ContentProvider
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Servizio che carica contenuti (risorse) in un Gioco.
I server di Roblox trasmettono tutte le risorse al client durante l'Tempo esecuzione: oggetti nell'area di lavoro, risorse mesh, risorse texture, ecc.Risorse come dati visivi in mesh, texture, decali e suoni vengono trasmesse come richiesto, indipendentemente dal fatto che Streaming sia abilitato.
In alcuni casi, questo comportamento non è desiderabile, poiché può causare un ritardo prima che il contenuto carichi nell'esperienza.
ContentProvider ti consente di precaricare le risorse in un'esperienza utilizzando il metodo ContentProvider:PreloadAsync().Potresti voler visualizzare una schermata di caricamento, precaricare risorse critiche e consentire al giocatore solo allora di entrare nell'esperienza.
Migliori pratiche per il preloading
- Solo preload risorse essenziali, non l'intera Workspace .Potresti ricevere occasionalmente pop-in, ma riduce i tempi di caricamento e in generale non interrompe l'esperienza del giocatore.Le risorse che sono buoni candidati per il preloading includono quelle richieste per la schermata di caricamento, l'interfaccia utente o l'area di partenza.
- Lascia che i giocatori saltino lo schermo di caricamento, o lo saltino automaticamente dopo un certo periodo di tempo.
Campioni di codice
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.")
Sommario
Proprietà
Utilizzato dal ContentProvider per scaricare risorse dal sito web Roblox.
Fornisce il numero di oggetti nella ContentProvider richiesta della coda che devono essere scaricati.
Metodi
Ottiene l'attuale Enum.AssetFetchStatus del contentId fornito.
Un segnale che si attiva quando il Enum.AssetFetchStatus del contenuto fornito cambia.
Produce fino a quando tutte le risorse associate al dato Instances non sono state caricate.
Proprietà
BaseUrl
Utilizzato dal ContentProvider per scaricare risorse dal sito web Roblox.
Questo URL punta a un sito web ospitato da Roblox da cui vengono scaricati gli asset e viene estratto dal file AppSettings.xml, situato nella cartella version-hash.
È possibile sovrascrivere questa proprietà utilizzando la funzione ContentProvider:SetBaseUrl() nella barra dei comandi; tuttavia, questo non è raccomandato e può causare problemi di caricamento delle risorse.
RequestQueueSize
Fornisce il numero di oggetti nella ContentProvider richiesta della coda che devono essere scaricati.
Gli elementi vengono aggiunti alla coda delle richieste del client quando un'asset viene utilizzata per la prima volta o ContentProvider:PreloadAsync() viene chiamata.
Agli sviluppatori viene consigliato di non utilizzare RequestQueueSize per creare bar di caricamento.Questo perché la dimensione della coda può aumentare e diminuire nel tempo man mano che vengono aggiunte e scaricate nuove risorse.Gli sviluppatori che vogliono visualizzare il progresso di caricamento devono caricare le risorse una alla volta (vedi esempio qui sotto).
Campioni di codice
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")
Metodi
GetAssetFetchStatus
Ottiene l'attuale Enum.AssetFetchStatus del contentId fornito. Usa GetAssetFetchStatusChangedSignal() per ascoltare le modifiche a questo valore.
Parametri
L'ID del contenuto per recuperare lo stato per.
Restituzioni
Il Enum.AssetFetchStatus del contenuto.
Campioni di codice
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
Un segnale che si attiva quando il Enum.AssetFetchStatus del contenuto fornito cambia.Connetti a questo segnale utilizzando un callback con un argomento di tipo Enum.AssetFetchStatus .Questo è particolarmente utile per le risorse che potrebbero aggiornarsi automaticamente come la miniatura di un utente quando cambia vestiti.
Parametri
Restituzioni
Campioni di codice
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
Parametri
Restituzioni
RegisterSessionEncryptedAsset
Parametri
Restituzioni
UnregisterDefaultEncryptionKey
Restituzioni
UnregisterEncryptedAsset
Parametri
Restituzioni
PreloadAsync
Produce fino a quando tutte le risorse associate al dato Instances non sono state caricate.Questo può essere utilizzato per interrompere uno script e non utilizzare il contenuto fino a quando non è certo che il contenuto sia stato caricato nell'esperienza.
Quando viene chiamato, il motore identifica i link al contenuto per ciascun elemento nella lista.Per qualsiasi dei Instances che hanno proprietà che definiscono link a contenuti, come un Decal o un Sound, il motore tenta di caricare queste risorse da Roblox.Per ogni risorsa richiesta, viene eseguita la funzione di richiamo, che indica l'ultima risorsa Enum.AssetFetchStatus .
Se una qualsiasi delle risorse non si Caricare, appare un messaggio di errore nell'Output.Il metodo stesso non commetterà errori e continuerà ad eseguire fino a quando non avrà elaborato ogni esempiorichiesta.
Limitazioni
SurfaceAppearance e MaterialVariant non sono supportati da PreloadAsync() perché questi oggetti dipendono da risorse di texture elaborate piuttosto che caricare direttamente singole texture.Chiamarlo su un'istanza SurfaceAppearance non farà nulla, ma le texture associate verranno ancora trasmesse durante l'esecuzione.
Parametri
Un'array di istanze da Caricare.
La funzione chiamata quando ogni richiesta di risorsa si completa. Restituisce la stringa content e l'ultima risorsa Enum.AssetFetchStatus .
Restituzioni
Campioni di codice
In this code sample, a sound and a texture are preloaded using Sound and Decal instances.
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))