ContentProvider
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
Service, der Inhalte (Assets) in ein Spiel ladeniert.
Roblox-Server streamen alle Assets zum Client zur Laufzeit: Objekte im Arbeitsbereich, Mesh-Assets, Textur-Assets usw.Assets wie Mesh-Bilddaten, Texturen, Aufkleber und Sounds werden unabhängig davon gestreamt, ob Streaming aktiviert ist oder nicht.
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 dich Assets in ein Erlebnis vorladen, indem du die Methode ContentProvider:PreloadAsync() verwendest.Vielleicht möchten Sie einen Ladebildschirm anzeigen, kritische Assets vorladen und den Spieler erst dann in die Erfahrung einlassen.
Best Practices für die Voreinstellung
- Lade nur wesentliche Assets vorab, nicht das gesamte Workspace.Du könntest gelegentlich ein Pop-in erhalten, aber es verringert die Ladezeiten und stört im Allgemeinen nicht das Erlebnis.Assets, die gute Kandidaten für die Voreinstellung sind, sind diejenigen, die für den Ladebildschirm, die Benutzeroberfläche oder den Startbereich erforderlich sind.
- Lassen Sie Spieler den Ladebildschirm überspringen oder ihn automatisch nach einer bestimmten Zeit überspringen.
Code-Beispiele
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.")
Zusammenfassung
Eigenschaften
Verwendet vom ContentProvider, um Assets von der Roblox-Website herunterzuladen.
Gibt die Anzahl der Artikel in der ContentProvider Anforderungswarteschlange an, die heruntergeladen werden müssen.
Methoden
Holt die aktuelle Enum.AssetFetchStatus des bereitgestellten contentId ab.
Ein Signal, das abgefeuert wird, wenn sich das Enum.AssetFetchStatus des bereitgestellten Inhalts ändert.
Gibt bis alle Assets, die mit dem angegebenen Instances verbunden sind, geladen wurden.
Ereignisse
Eigenschaften
BaseUrl
Verwendet vom ContentProvider, 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-Ordner abgezogen werden, der sich im Ordner der Versions hash-Datei befindet.
Es ist möglich, diese Eigenschaft mit der ContentProvider:SetBaseUrl()-Funktion in der Befehlsleiste zu überschreiben; dies wird jedoch nicht empfohlen und kann zu Problemen bei der Asset-Ladung führen.
RequestQueueSize
Gibt die Anzahl der Artikel in der ContentProvider Anforderungswarteschlange an, die heruntergeladen werden müssen.
Gegenstände werden in die Anforderungswarteschlange des Clients hinzugefügt, wenn ein Asset zum ersten Mal verwendet wird oder ContentProvider:PreloadAsync() aufgerufen wird.
Es wird empfohlen, nicht RequestQueueSize zu verwenden, um Ladebalken zu erstellen.Das liegt daran, dass die Größe der Warteschlange sowohl im Laufe der Zeit zunehmen als auch verringern kann, wenn neue Assets hinzugefügt und heruntergeladen werden.Entwickler, die den Fortschritt der Lädtung anzeigen möchten, sollten Assets eine nach der anderen laden (siehe Beispiel unten).
Code-Beispiele
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")
Methoden
GetAssetFetchStatus
Holt sich die aktuelle Enum.AssetFetchStatus des bereitgestellten contentId. Verwende GetAssetFetchStatusChangedSignal(), um auf Änderungen an diesem Wert zu hören.
Parameter
Die ID des Inhalts, um den Status abzurufen.
Rückgaben
Das Enum.AssetFetchStatus des Inhalts.
Code-Beispiele
Ruft das ursprüngliche Enum.AssetFetchStatus eines Assets ab und hört auf zukünftige Updates.
local ContentProvider = game:GetService("ContentProvider")
-- Ein Beispiel-Asset zum Laden
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Geben Sie den aktuellen AssetFetchStatus des Assets aus
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Auf Updates hören
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Aktiviere das Asset zur Voreinstellung
local function onAssetRequestComplete(contentId: string, assetFetchStatus: Enum.AssetFetchStatus)
print(`Preload status {contentId}: {assetFetchStatus.Name}`)
end
ContentProvider:PreloadAsync({ exampleAsset }, onAssetRequestComplete)
GetAssetFetchStatusChangedSignal
Ein Signal, das abgefeuert wird, wenn sich das Enum.AssetFetchStatus des bereitgestellten Inhalts ändert.Verbinde mit diesem Signal durch die Verwendung eines Rückrufs mit einem Argument vom Typ Enum.AssetFetchStatus.Dies ist besonders nützlich für Assets, die sich möglicherweise automatisch aktualisieren, wie die Miniaturansicht eines Benutzers, wenn er Kleidung wechselt.
Parameter
Rückgaben
Code-Beispiele
Ruft das ursprüngliche Enum.AssetFetchStatus eines Assets ab und hört auf zukünftige Updates.
local ContentProvider = game:GetService("ContentProvider")
-- Ein Beispiel-Asset zum Laden
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Geben Sie den aktuellen AssetFetchStatus des Assets aus
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Auf Updates hören
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Aktiviere das Asset zur Voreinstellung
local function onAssetRequestComplete(contentId: string, assetFetchStatus: Enum.AssetFetchStatus)
print(`Preload status {contentId}: {assetFetchStatus.Name}`)
end
ContentProvider:PreloadAsync({ exampleAsset }, onAssetRequestComplete)
RegisterEncryptedAsset
Parameter
Rückgaben
RegisterSessionEncryptedAsset
Parameter
Rückgaben
UnregisterDefaultEncryptionKey
Rückgaben
UnregisterEncryptedAsset
Parameter
Rückgaben
PreloadAsync
Gibt bis alle Assets, die mit dem angegebenen Instances verbunden sind, geladen wurden.Dies kann verwendet werden, um ein Skript anzuhalten und den Inhalt nicht zu verwenden, bis sichergestellt ist, dass der Inhalt in das Erlebnis geladen wurde.
Wenn aufgerufen, identifiziert die Engine Verknüpfungen zu Inhalten für jedes Element in der Liste.Für jede der Instances, die Eigenschaften haben, die Verknüpfungen zu Inhalten definieren, wie ein Decal oder ein Sound, versucht die Engine, diese Assets von Roblox zu laden.Für jedes angeforderte Asset läuft die Rückruffunktion, was den endgültigen Enum.AssetFetchStatus des Objektanzeigt.
Wenn eines der Assets nicht geladen wird, erscheint eine Fehlermeldung in der Ausgabe.Die Methode selbst wird keinen Fehler auslösen und wird fortfahren, bis sie jede angeforderte Instanz verarbeitet hat.
Beschränkungen
SurfaceAppearance und MaterialVariant werden von PreloadAsync() nicht unterstützt, da diese Objekte auf verarbeitete Texturpaket-Assets angewiesen sind, anstatt einzelne Texturen direkt zu laden.Wenn Sie es auf einer SurfaceAppearance Instanz aufrufen, wird nichts getan, aber die damit verbundenen Texturen werden während der Laufzeit immer noch gestreamt.
Parameter
Eine Reihe von Instanzen zum laden.
Die Funktion, die aufgerufen wird, wenn jede Asset-Anforderung abgeschlossen ist. Gibt die content Zeichenkette und das letzte Enum.AssetFetchStatus des Objektzurück.
Rückgaben
Code-Beispiele
In diesem Codebeispiel werden ein Klang und eine Textur mit Sound und Decal Instanzen vorab geladen.
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,
}
-- Dies wird getroffen, wenn jedes Asset gelöst wird
local callback = function(assetId, assetFetchStatus)
print("PreloadAsync() resolved asset ID:", assetId)
print("PreloadAsync() final AssetFetchStatus:", assetFetchStatus)
end
-- Lade den Inhalt und die Zeit vorab
local startTime = os.clock()
ContentProvider:PreloadAsync(assets, callback)
local deltaTime = os.clock() - startTime
print(("Preloading complete, took %.2f seconds"):format(deltaTime))