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

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.

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

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

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Gibt die Anzahl der Artikel in der ContentProvider Anforderungswarteschlange an, die heruntergeladen werden müssen.

Methoden

Eigenschaften

BaseUrl

Schreibgeschützt
Nicht repliziert
Parallel lesen

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

Schreibgeschützt
Nicht repliziert
Parallel lesen

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.

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

Holt sich die aktuelle Enum.AssetFetchStatus des bereitgestellten contentId. Verwende GetAssetFetchStatusChangedSignal(), um auf Änderungen an diesem Wert zu hören.

Parameter

contentId: ContentId

Die ID des Inhalts, um den Status abzurufen.

Standardwert: ""

Rückgaben

Code-Beispiele

Ruft das ursprüngliche Enum.AssetFetchStatus eines Assets ab und hört auf zukünftige Updates.

AssetFetchStatus überwachen

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

contentId: ContentId
Standardwert: ""

Rückgaben

Code-Beispiele

Ruft das ursprüngliche Enum.AssetFetchStatus eines Assets ab und hört auf zukünftige Updates.

AssetFetchStatus überwachen

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)

ListEncryptedAssets


Rückgaben

RegisterDefaultEncryptionKey

()

Parameter

encryptionKey: string
Standardwert: ""

Rückgaben

()

RegisterDefaultSessionKey

()

Parameter

sessionKey: string
Standardwert: ""

Rückgaben

()

RegisterEncryptedAsset

()

Parameter

assetId: ContentId
Standardwert: ""
encryptionKey: string
Standardwert: ""

Rückgaben

()

RegisterSessionEncryptedAsset

()

Parameter

contentId: ContentId
Standardwert: ""
sessionKey: string
Standardwert: ""

Rückgaben

()

UnregisterDefaultEncryptionKey

()

Rückgaben

()

UnregisterEncryptedAsset

()

Parameter

assetId: ContentId
Standardwert: ""

Rückgaben

()

PreloadAsync

()
Angehalten

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

contentIdList: Array

Eine Reihe von Instanzen zum laden.

Standardwert: ""
callbackFunction: function

Die Funktion, die aufgerufen wird, wenn jede Asset-Anforderung abgeschlossen ist. Gibt die content Zeichenkette und das letzte Enum.AssetFetchStatus des Objektzurück.

Standardwert: "nil"

Rückgaben

()

Code-Beispiele

In diesem Codebeispiel werden ein Klang und eine Textur mit Sound und Decal Instanzen vorab geladen.

Assets vorladen

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

Ereignisse

AssetFetchFailed

Parameter

assetId: ContentId