ContentProvider
*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.
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
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
Używany przez ContentProvider do ściągania zasobów z witryny Roblox.
Daje liczbę pozycji w ContentProvider wątku, które należy zeskanować.
Metody
Otrzymuje bieżący Enum.AssetFetchStatus dostarczony przez contentId .
sygnał, który się włącza, gdy zmienia się Enum.AssetFetchStatus dostarczonej treści.
Wykonuje się do czasu załadowania wszystkich zasobów związanych z danej Instances .
Zdarzenia
Właściwości
BaseUrl
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
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
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
Identyfikator treści, dla którego chcesz otrzymać status.
Zwroty
Menu.AssetFetchStatus treści.
Przykłady kodu
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
Zwroty
Przykłady kodu
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
Zwroty
UnregisterEncryptedAsset
Parametry
Zwroty
PreloadAsync
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
Materiały w postaci instancji lub ID serwera (dla obrazów) do wczytywać.
Funkcja nazywana, gdy każde wnioskowanie o zasoby zakończy się. Wynika content strona i Enum.AssetFetchStatus .
Zwroty
Przykłady kodu
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))