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 ładowuje treści (zasoby) do gra.

Serwery Roblox przesyłają wszystkie zasoby na klienta podczas uruchomienia: obiekty w przestrzeni roboczej, zasoby sieciowe, zasoby tekstury, itp. Zasoby, takie jak dane wizualne sieci, tekstury, naklejki i dźwięki, przesyłane są w taki sposób, jak wymagane, niezależnie od tego, czy Streaming jest włączony.

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

ContentProvider umożliwia ładowanie zasobów w doświadczeniu za pomocą metody ContentProvider:PreloadAsync(). Możliwe, że chcesz wyświetlić ekran ładowania, ładować krytyczne zasoby i tylko wtedy pozwolić graczowi na doświadczenie.

Najlepsze praktyki do przedładowania

  • Tylko przedładowuj niezbędne zasoby, nie całą przestrzeń roboczą. Możesz otrzymać okazionalne wyskakujące okienko, ale zmniejsza czas ładowania i ogólnie nie ingeruje w doświadczenie gracza. Zasoby, które są dobrymi kandydatami do ładowania, to te wymagane do ekranu ładowania, interfejsu użytkownika lub obszaru startowego.
  • Pozwól graczom przesunąć ekran ładowania lub automatycznie przesunąć go po pewnym czasie.

Przykłady kodu

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 ściągania zasobów z witryny Roblox.

Ten URL prowadzi do witryny hostowanej Roblox, z której zasoby są pobierane i jest wyciągnięte z pliku AppSettings.xml, położonego w katalogu wersji.

Możliwe jest przeciągnięcie tego właściwości za pomocą funkcji ContentProvider:SetBaseUrl() w oknie command; jednak, nie jest to zalecane i może powodować problemy z ładowaniem zasobów.

RequestQueueSize

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Daje liczbę pozycji w ContentProvider wątku, które należy zeskanować.

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

Rozwijać zaleca się nie używać RequestQueueSize, aby tworzyć wczytywarki ładowania. To jest dlatego, że rozmiar kolejki może zwiększać się i zmniejszać wraz z czasem, gdy nowe zasoby są dodawane i ściągnięte. Rozwijać, które ładowanie postępu można załadować jedną po drugiej (patrz przykład poniżej).

Przykłady kodu

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

Dostarcza bieżący Enum.AssetFetchStatus ContentId dostarczony. Użyj contentId, aby słuchać zmian w tej wartości.

Parametry

contentId: ContentId

Identyfikator treści, dla którego chcesz otrzymać status.


Zwroty

Menu.AssetFetchStatus treści.

Przykłady kodu

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

Znaki, które się palą, gdy zmienia się Enum.AssetFetchStatus dostarczonej treści. Połącz się z tym znakiem poprzez użycie w zwrotce funkcji Enum.AssetFetchStatus . Jest to szczególnie przydatne dla zasobów, które mogą się automatycznie aktualizować, jak w przypadku miniaturki użytkownika, gdy zmienia się strój.

Parametry

contentId: ContentId

Zwroty

Przykłady kodu

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

void

Parametry

encryptionKey: string

Zwroty

void

RegisterDefaultSessionKey

void

Parametry

sessionKey: string

Zwroty

void

RegisterEncryptedAsset

void

Parametry

assetId: ContentId
encryptionKey: string

Zwroty

void

RegisterSessionEncryptedAsset

void

Parametry

contentId: ContentId
sessionKey: string

Zwroty

void

UnregisterDefaultEncryptionKey

void

Zwroty

void

UnregisterEncryptedAsset

void

Parametry

assetId: ContentId

Zwroty

void

PreloadAsync

void
Wynik

Zwraca do momentu ładowania wszystkich zasobów związanych z tym Instances . Można używać tego do wstrzymania skryptu i nie używania treści, dopóki treść nie zostanie załadowana do doświadczenia.

Kiedy jest wywołany, silnik identyfikuje linki do treści dla każdego pozycji na liście. Dla dowolnej z Instances , które mają właściwości, które definiują linki do treści, takie jak Decal lub Class.Sound|Sound

Ten metod może również odebrać listę ID treści, ale te treści muszą być zgodne z obiektem圖像 . Spróbuj ładować nierozmiarowe zasoby poprzez użycie ich ID treści.

Jeśli jedna z zasobów nie zostanie wczytywać, pojawi się wiadomość błędu w wyjściu. Sam metodowy nie będzie się błądzić i nadal będzie działać, aż nie załadował wszystkich prośbanych instancji lub identyfikatorów zasobów.

Parametry

contentIdList: Array

Materiały w postaci instancji lub ID serwera (dla obrazów) do wczytywać.

callbackFunction: function

Funkcja nazywana, gdy każde wnioskowanie o zasoby zakończy się. Wynika content strona i Enum.AssetFetchStatus .

Wartość domyślna: "nil"

Zwroty

void

Przykłady kodu

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