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 questo esempio un Decal e un Suono vengono pre-caricati in un gioco. Una volta terminato il caricamento verrà stampato un messaggio sull'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
RequestQueueSize
Campioni di codice
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
Parametri
Restituzioni
Campioni di codice
local ContentProvider = game:GetService("ContentProvider")
-- Un esempio di risorsa da caricare
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Esporta l'attuale AssetFetchStatus dell'asset
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Ascolta gli aggiornamenti
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Attiva l'asset per preload
local function onAssetRequestComplete(contentId: string, assetFetchStatus: Enum.AssetFetchStatus)
print(`Preload status {contentId}: {assetFetchStatus.Name}`)
end
ContentProvider:PreloadAsync({ exampleAsset }, onAssetRequestComplete)
GetAssetFetchStatusChangedSignal
Parametri
Restituzioni
Campioni di codice
local ContentProvider = game:GetService("ContentProvider")
-- Un esempio di risorsa da caricare
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Esporta l'attuale AssetFetchStatus dell'asset
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Ascolta gli aggiornamenti
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Attiva l'asset per 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
Parametri
Restituzioni
Campioni di codice
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,
}
-- Questo verrà colpito ogni volta che ogni risorsa si risolve
local callback = function(assetId, assetFetchStatus)
print("PreloadAsync() resolved asset ID:", assetId)
print("PreloadAsync() final AssetFetchStatus:", assetFetchStatus)
end
-- Carica in anticipo il contenuto e il tempo
local startTime = os.clock()
ContentProvider:PreloadAsync(assets, callback)
local deltaTime = os.clock() - startTime
print(("Preloading complete, took %.2f seconds"):format(deltaTime))