ContentProvider
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Servizio che carica il contenuto (le risorse) in un Gioco.
I server Roblox stream all'interno di tutte le risorse al client in Tempo esecuzione: oggetti nell'area di Area di lavoro, risorse mesh, risorse di texture, ecc. Le risorse come Streaming visual data, texture, decal, e suoni vengono streamed in base a come richiesto, indipendentemente dal fatto che Streaming sia abilitato.
In alcuni casi, questo comportamento non è desiderato, poiché può causare un ritardo prima che il contenuto venga caricato nell'esperienza.
ContentProvider ti consente di pre-caricare le risorse in un'esperienza utilizzando il metodo ContentProvider:PreloadAsync(). Potresti voler visualizzare uno schermo di caricamento, pre-caricare le risorse critiche e quindi consentire al giocatore nell'esperienza.
Migliori Pratiche per il Pre-Caricamento
- Pre-carica solo le risorse essenziali, non l'intero Area di lavoro. Potresti ottenere pop-in occasionali, ma riduce i tempi di caricamento e in generale non disturbano l'esperienza del giocatore. Le risorse che sono buone candidati per il pre-caricamento includono quelle richieste per la schermata di caricamento, l'interfaccia utente o l'area di partenza.
- I giocatori possono saltare la schermata di caricamento, o saltare automaticamente dopo un certo numero di tempo.
Campioni di codice
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.
Dà il numero di oggetti nella richiesta di ContentProvider che deve essere scaricato.
Metodi
Ottiene il current Enum.AssetFetchStatus of the contentId provided.
Un segnale che si attiva quando il Enum.AssetFetchStatus di contenuto fornito cambia.
Rende fino a quando tutti gli asset associati all'Instances specificato sono stati caricati.
Proprietà
BaseUrl
Utilizzato dal ContentProvider per scaricare risorse dal sito Web Roblox.
Questo URL punta a un sito web hostato da Roblox da cui le risorse vengono scaricate e sono estratte dal file AppSettings.xml, situato nella cartella version-hash.
È possibile sovrascrivere questa proprietà utilizzando la funzione ContentProvider:SetBaseUrl() nella barra dei comandi; tuttavia, non è raccomandato e potrebbe causare problemi di caricamento delle risorse.
RequestQueueSize
Dà il numero di oggetti nella richiesta di ContentProvider che deve essere scaricato.
Gli oggetti vengono aggiunti alla coda di richiesta del client quando viene utilizzato un oggetto per la prima volta o ContentProvider:PreloadAsync() viene chiamato.
Gli sviluppatori sono consigliati di non utilizzare RequestQueueSize per creare barre di caricamento. Ciò è dovuto al fatto che la dimensione della coda può aumentare e diminuire nel tempo mentre nuove risorse vengono aggiunte e scaricate. Gli sviluppatori che vogliono visualizzare il progresso di caricamento dovrebbero caricare le risorse una alla volta (vedi esempio sottostante).
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
Ottiene il Enum.AssetFetchStatus attuale fornito. Usa contentId per ascoltare le modifiche di questo valore.
Parametri
L'ID del contenuto per ottenere lo stato per.
Restituzioni
Il Enum.AssetFetchStatus dei contenuti.
Campioni di codice
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 della risorsa fornita 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 i vestiti.
Parametri
Restituzioni
Campioni di codice
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
Restituzioni
UnregisterEncryptedAsset
Parametri
Restituzioni
PreloadAsync
Ritira fino a quando tutti gli asset associati all'Instances sono stati caricati. Questo può essere utilizzato per interrompere uno script e non utilizzare il contenuto finché non è sicuro che il contenuto sia stato caricato nell'esperienza.
Quando viene chiamato, il motore identifica i link per il contenuto per ogni elemento nella lista. Per qualsiasi dei Instances che hanno proprietà che definiscono i link al contenuto, come un Decal o un Sound, il motore tenta di caric
Questo metodo può anche prendere in lista un elenco di ID dei contenuti, tuttavia questi ID devono corrispondere a immagine risorse. Tentando di caricare le risorse non immagine attraverso l'uso delle loro stringhe ID dei contenuti corrisponderà al fallimento.
Se uno qualsiasi delle risorse non si Caricare, un messaggio di errore appare nell'Output. Il metodo stesso non fallirà e continuerà ad eseguire fino a quando non avrà elaborato ogni istanza richiesta o ID risorsa.
Parametri
Un array of istanze o stringhe ID dei contenuti (per le immagini) da Caricare.
La funzione chiamata quando ogni richiesta di risorsa completa. Ritorna la content string e il suo ultimo Enum.AssetFetchStatus .
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,
}
-- 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))