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 ł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.
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 pobierania zasobów z witryny Roblox.
Podaje liczbę elementów w kolejce żądań ContentProvider, które należy pobrać.
Metody
Zdobywa aktualny Enum.AssetFetchStatus z contentId dostarczony.
Sygnał, który wystrzeliwuje się, gdy zmienia się Enum.AssetFetchStatus zawartość dostarczona.
Poddaje się, dopóki wszystkie zasoby powiązane z danym Instances nie zostaną załadowane.
Zdarzenia
Właściwości
BaseUrl
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
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.
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
ID treści do pobrania statusu.
Zwroty
The Enum.AssetFetchStatus treści.
Przykłady kodu
Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.
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
Zwroty
Przykłady kodu
Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.
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)
RegisterEncryptedAsset
Parametry
Zwroty
RegisterSessionEncryptedAsset
Parametry
Zwroty
UnregisterDefaultEncryptionKey
Zwroty
UnregisterEncryptedAsset
Parametry
Zwroty
PreloadAsync
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
Zbiór instancji do wczytywać.
Funkcja, która jest wzywana, gdy każde żądanie zasobu zostanie zrealizowane. Zwraca content ciąg i ostatnią część zasobu Enum.AssetFetchStatus.
Zwroty
Przykłady kodu
In this code sample, a sound and a texture are preloaded using Sound and Decal instances.
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))