ContentProvider

Veraltete anzeigen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Nicht erstellbar
Dienst
Nicht repliziert

Dienst, der Inhalte (Assets) in ein Spiel laden kann.

Roblox-Server streamen alle Assets zum Client zur Laufzeit: Objekte in der Arbeitsbereich, Mesh-Assets, Textur-Assets usw. Assets wie Mesh-Visualdaten, Texturen, Aufkleber, Sounds usw. Assets wie Mesh- visuelle Daten, Texturen, Decals und Sounds werden in As需要, unabhängig davon, ob Streaming aktiviert ist.

In einigen Fällen ist dieses Verhalten unerwünscht, da es zu einer Verzögerung führen kann, bevor der Inhalt in die Erlebnisgeladen wird.

ContentProvider lässt Sie Assets in ein Erlebnis mit der Class.ContentProvider:PreloadAsync() -Methode vorladen. Sie möchten vielleicht einen Ladebildschirm anzeigen, kritische Assets vorladen und nur dann den Spieler in das Erlebnis erlauben.

Best Practices für die Vorladen

  • Laden Sie nur notwendige Assets vor, nicht die gesamte Arbeitsbereich. Sie erhalten gelegentlich einen Pop-in, aber es verringert die Ladezeiten und stört in der Regel nicht die Spieler-Erlebniss. Assets, die gute Kandidaten für die Vorladen sind, sind diejenigen, die für den Ladebildschirm, die UI oder den Startbereich erforderlich sind.
  • Lassen Sie die Spieler die Ladebildschirm überspringen, oder überspringen Sie sie automatisch nach einer bestimmten Zeit.

Code-Beispiele

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

Zusammenfassung

Eigenschaften

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Wird vom ContentProvider verwendet, um Assets von der Roblox-Website herunterzuladen.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Gibt die Anzahl der Gegenstände in der ContentProvider Request-Warteschlange an, die heruntergeladen werden müssen.

Methoden

Eigenschaften

BaseUrl

Schreibgeschützt
Nicht repliziert
Parallel lesen

Wird vom ContentProvider verwendet, um Assets von der Roblox-Website herunterzuladen.

Diese URL zeigt auf eine von Roblox gehostete Website, von der Assets heruntergeladen und aus dem AppSettings.xml-Datei, die in der Version-Hash-Ordner befindlich ist, hervorgeholen werden.

Es ist möglich, dieses Eigenschaften mit der ContentProvider:SetBaseUrl() Funktion in der Befehlsleiste zu überschreiben; dies ist jedoch nicht empfohlen und kann Asset-Loading-Probleme verursachen.

RequestQueueSize

Schreibgeschützt
Nicht repliziert
Parallel lesen

Gibt die Anzahl der Gegenstände in der ContentProvider Request-Warteschlange an, die heruntergeladen werden müssen.

Items werden zur Anfrage des Clients hinzugefügt, wenn ein Asset zum ersten Mal verwendet wird oder ContentProvider:PreloadAsync() aufgerufen wird.

Entwickler werden daran empfohlen, RequestQueueSize nicht zu verwenden, um Ladeleisten zu erstellen. Dies liegt daran, dass die Warteschlangegröße sowohl über Zeit hinweg größer als ursprünglich hinzugefügte Assets sein kann als auch kleiner sein. Entwickler, die Ladefortschritte anzeigen möchten, sollten Assets einzeln laden (siehe unten).

Code-Beispiele

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

Methoden

GetAssetFetchStatus

Erhalte den aktuellen Enum.AssetFetchStatus der contentId bereitgestellten. Verwende GetAssetFetchStatusChangedSignal(), um Änderungen an diesem Wert zu hören.

Parameter

contentId: ContentId

Die ID des Inhalts, für den Status abgerufen werden soll.


Rückgaben

Code-Beispiele

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

Ein Signal, das ausgelöst wird, wenn sich der Enum.AssetFetchStatus des bereitgestellten Inhalts ändert. Verbinden Sie sich mit diesem Signal, indem Sie einen Rückruf mit einem Argument von Typ Enum.AssetFetchStatus verwenden. Dies ist besonders nützlich für Assets, die sich automatisch wie das Miniaturbild eines Benutzers aktualisieren, wenn er Kleidung wechseln kann.

Parameter

contentId: ContentId

Rückgaben

Code-Beispiele

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


Rückgaben

RegisterDefaultEncryptionKey

void

Parameter

encryptionKey: string

Rückgaben

void

RegisterDefaultSessionKey

void

Parameter

sessionKey: string

Rückgaben

void

RegisterEncryptedAsset

void

Parameter

assetId: ContentId
encryptionKey: string

Rückgaben

void

RegisterSessionEncryptedAsset

void

Parameter

contentId: ContentId
sessionKey: string

Rückgaben

void

UnregisterDefaultEncryptionKey

void

Rückgaben

void

UnregisterEncryptedAsset

void

Parameter

assetId: ContentId

Rückgaben

void

PreloadAsync

void
Angehalten

Erzeugt bis alle Assets, die mit dem angegebenen Instances verbunden sind, geladen wurden. Dies kann verwendet werden, um ein Skript zu pausieren und keinen Inhalt zu verwenden, bis der Inhalt in das Erlebnis geladen ist.

Wenn aufgerufen, identifiziert der Engine Links zu Inhalten für jedes Element in der Liste. Für jedes der Instances , die Eigenschaften haben, die Verknüpfungen mit Inhalten definieren, wie z. B. ein Decal oder ein Sound, versucht,

Diese Methode kann auch eine Liste von Inhalten ID-Strings aufnehmen, aber diese Strings müssen sich auf Bild -Assets beziehen. Der Versuch, nicht-image-Assets durch den Gebrauch ihrer Inhalts-ID-Strings zu laden, wird mit dem Erfolg enden.

Wenn eines der Assets nicht geladen werden kann, erscheint ein Fehler in der Ausgabe. Die Methode selbst wird keinen Fehler machen und wird weiter ausgeführt, bis sie jeden angefordertenen Instanz oder Asset-ID verarbeitet hat.

Parameter

contentIdList: Array

Ein Array von Instanzen oder Inhalten ID-Strings (für Bilder) zu laden.

callbackFunction: function

Die Funktion wird aufgerufen, wenn jede Asset-Anfrage abgeschlossen ist. Wird die content-String und das Objekt's endgültige Enum.AssetFetchStatus zurückgegeben.

Standardwert: "nil"

Rückgaben

void

Code-Beispiele

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

Ereignisse

AssetFetchFailed

Parameter

assetId: ContentId