ContentProvider

Visualizza obsoleti

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Non costruibile
Assistenza
Non Replicato

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

ContentProvider

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à

Metodi

Proprietà

BaseUrl

Sola Lettura
Non Replicato
Lettura Parallela

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

Sola Lettura
Non Replicato
Lettura Parallela

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

ContentProvider Loading Bar

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

contentId: ContentId

L'ID del contenuto per ottenere lo stato per.


Restituzioni

Campioni di codice

Monitoring AssetFetchStatus

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

contentId: ContentId

Restituzioni

Campioni di codice

Monitoring AssetFetchStatus

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)

ListEncryptedAssets


Restituzioni

RegisterDefaultEncryptionKey

void

Parametri

encryptionKey: string

Restituzioni

void

RegisterDefaultSessionKey

void

Parametri

sessionKey: string

Restituzioni

void

RegisterEncryptedAsset

void

Parametri

assetId: ContentId
encryptionKey: string

Restituzioni

void

RegisterSessionEncryptedAsset

void

Parametri

contentId: ContentId
sessionKey: string

Restituzioni

void

UnregisterDefaultEncryptionKey

void

Restituzioni

void

UnregisterEncryptedAsset

void

Parametri

assetId: ContentId

Restituzioni

void

PreloadAsync

void
Resa

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

contentIdList: Array

Un array of istanze o stringhe ID dei contenuti (per le immagini) da Caricare.

callbackFunction: function

La funzione chiamata quando ogni richiesta di risorsa completa. Ritorna la content string e il suo ultimo Enum.AssetFetchStatus .

Valore predefinito: "nil"

Restituzioni

void

Campioni di codice

Preloading Assets

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))

Eventi

AssetFetchFailed

Parametri

assetId: ContentId