ContentProvider

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Brak możliwości tworzenia
Usługa
Bez replikacji

Usługa, która ładować treści (zasoby) do gra.

Serwery Roblox przesyłają wszystkie zasoby do klienta podczas uruchamiania: obiekty w przestrzeni roboczej, zasoby siatki, zasoby tekstury itp.Aktywa takie jak dane wizualne siatki, tekstury, nadruki i dźwięki są przesyłane tak, jak jest to wymagane, niezależnie od tego, czy Streamowanie jest włączone.

W niektórych przypadkach zachowanie to jest niepożądane, ponieważ może doprowadzić do opóźnienia przed załadowaniem treści do doświadczenia.

ContentProvider pozwala ci przedładować zasoby do doświadczenia za pomocą metody ContentProvider:PreloadAsync().Możesz chcieć wyświetlić ekran ładowania, przed załadowaniem ważnych zasobów i tylko wtedy pozwolić graczowi wejść do doświadczenia.

Najlepsze praktyki dotyczące przedładowania

  • Tylko przed załadowaniem niezbędnych zasobów, nie całego Workspace.Możesz otrzymywać okazjonalne wyskakiwania, ale zmniejsza to czas ładowania i ogólnie nie zakłóca doświadczenia gracza.Aktywa, które są dobrymi kandydatami do przedsprzedawania, obejmują te wymagane dla ekranu ładowania, interfejsu użytkownika lub obszaru startowego.
  • Pozwól graczom pominąć ekran ładowania lub automatycznie pominąć go po pewnym czasie.

Przykłady kodu

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

Podsumowanie

Właściwości

Metody

Właściwości

BaseUrl

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Używany przez ContentProvider do pobierania zasobów z witryny Roblox.

Ta URL wskazuje na hostowaną w Roblox witrynę internetową, z której pobierane są zasoby i jest wyciągana z pliku AppSettings.xml, znajdującego się w katalogu wersji- hash.

Można zastąpić tę właściwość za pomocą funkcji ContentProvider:SetBaseUrl() w pasku poleceń; jednak nie jest to zalecane i może powodować problemy z ładowaniem zasobów.

RequestQueueSize

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Podaje liczbę elementów w kolejce żądań ContentProvider, które należy pobrać.

Przedmioty są dodawane do kolejki żądań klienta, gdy zasób jest używany po raz pierwszy lub ContentProvider:PreloadAsync() jest wzywany.

Poleca się programistom, aby nie używali RequestQueueSize do tworzenia pasków ładowania.Dzieje się tak, ponieważ rozmiar kolejki może wzrosnąć i zmniejszyć się z czasem, gdy nowe zasoby są dodawane i pobierane.Programiści, którzy chcą wyświetlać postęp ładowania, powinni ładować zasoby jeden po drugim (zobacz przykład poniżej).

Przykłady kodu

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

Metody

GetAssetFetchStatus

Otrzymuje aktualną Enum.AssetFetchStatus z contentId dostarczoną. Użyj GetAssetFetchStatusChangedSignal() do słuchania zmian w tej wartości.

Parametry

contentId: ContentId

ID treści do pobrania statusu.

Wartość domyślna: ""

Zwroty

Przykłady kodu

Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.

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

Sygnał, który wystrzeliwuje się, gdy zmienia się Enum.AssetFetchStatus zawartość dostarczona.Połącz się z tym sygnałem za pomocą powrotu za pomocą jednego argumentu typu Enum.AssetFetchStatus.Jest to szczególnie przydatne dla zasobów, które mogą automatycznie się aktualizować, takich jak miniaturka użytkownika, gdy zmienia ubrania.

Parametry

contentId: ContentId
Wartość domyślna: ""

Zwroty

Przykłady kodu

Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.

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


Zwroty

RegisterDefaultEncryptionKey

()

Parametry

encryptionKey: string
Wartość domyślna: ""

Zwroty

()

RegisterDefaultSessionKey

()

Parametry

sessionKey: string
Wartość domyślna: ""

Zwroty

()

RegisterEncryptedAsset

()

Parametry

assetId: ContentId
Wartość domyślna: ""
encryptionKey: string
Wartość domyślna: ""

Zwroty

()

RegisterSessionEncryptedAsset

()

Parametry

contentId: ContentId
Wartość domyślna: ""
sessionKey: string
Wartość domyślna: ""

Zwroty

()

UnregisterDefaultEncryptionKey

()

Zwroty

()

UnregisterEncryptedAsset

()

Parametry

assetId: ContentId
Wartość domyślna: ""

Zwroty

()

PreloadAsync

()
Wynik

Poddaje się, dopóki wszystkie zasoby powiązane z danym Instances nie zostaną załadowane.Można tego użyć, aby zatrzymać skrypt i nie używać zawartości, dopóki nie będzie pewne, że zawartość została załadowana do doświadczenia.

Po wezwaniu silnik identyfikuje linki do treści dla każdego elementu na liście.Dla każdego z Instances, które mają właściwości definiujące linki do treści, takie jak Decal lub Sound, silnik próbuje załadować te zasoby z Roblox.Dla każdego żądanego zasobu uruchamana jest funkcja powrotna, wskazująca ostateczny Enum.AssetFetchStatus zasobu.

Jeśli któryś z zasobów nie zostanie wczytywać, pojawia się komunikat o błędzie w wyniku.Sama metoda nie będzie błędna i będzie nadal wykonywać, dopóki nie przetworzy każdej żądanej instancja.

Ograniczenia

SurfaceAppearance i MaterialVariant nie są wspierane przez PreloadAsync() ponieważ te obiekty polegają na przetworzonych zasobach pakietu tekstur, a nie na bezpośrednim ładowaniu pojedynczych tekstur.Wezwanie go na instancji SurfaceAppearance nie zrobi nic, ale powiązane tekstury nadal będą przesyłane podczas uruchamiania.

Parametry

contentIdList: Array

Zbiór instancji do wczytywać.

Wartość domyślna: ""
callbackFunction: function

Funkcja, która jest wzywana, gdy każde żądanie zasobu zostanie zrealizowane. Zwraca content ciąg i ostatnią część zasobu Enum.AssetFetchStatus.

Wartość domyślna: "nil"

Zwroty

()

Przykłady kodu

In this code sample, a sound and a texture are preloaded using Sound and Decal instances.

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

Zdarzenia

AssetFetchFailed

Parametry

assetId: ContentId