ContentProvider
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
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
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
Wird vom ContentProvider verwendet, um Assets von der Roblox-Website herunterzuladen.
Gibt die Anzahl der Gegenstände in der ContentProvider Request-Warteschlange an, die heruntergeladen werden müssen.
Methoden
Bietet die aktuelle Enum.AssetFetchStatus der contentId an.
Ein Signal, das ausgelöst wird, wenn sich der Enum.AssetFetchStatus der angegebenen Inhalte ändert.
Erzeugt, bis alle der mit dem gegebenen Instances verbundenen Assets geladen wurden.
Ereignisse
Eigenschaften
BaseUrl
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
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
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
Die ID des Inhalts, für den Status abgerufen werden soll.
Rückgaben
Der Enum.AssetFetchStatus des Inhalts.
Code-Beispiele
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
Rückgaben
Code-Beispiele
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
Rückgaben
UnregisterEncryptedAsset
Parameter
Rückgaben
PreloadAsync
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
Ein Array von Instanzen oder Inhalten ID-Strings (für Bilder) zu laden.
Die Funktion wird aufgerufen, wenn jede Asset-Anfrage abgeschlossen ist. Wird die content-String und das Objekt's endgültige Enum.AssetFetchStatus zurückgegeben.
Rückgaben
Code-Beispiele
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))