ContentProvider
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
Layanan yang memuat konten (aset) ke dalam game.
Server Roblox menyiarkan semua aset ke klien saat menjalankan: objek di Workspace, aset mesh, aset tekstur, dll.Aset seperti data visual mesh, tekstur, stiker, dan suara diputar sesuai kebutuhan, terlepas dari apakah Streaming diaktifkan.
Dalam beberapa kasus, perilaku ini tidak diinginkan, karena dapat menyebabkan penundaan sebelum konten dimuat ke dalam pengalaman.
ContentProvider memungkinkan Anda untuk memuat aset ke dalam pengalaman menggunakan metode ContentProvider:PreloadAsync().Anda mungkin ingin menampilkan layar pemuatan, memuat aset kritis, dan hanya kemudian mengizinkan pemain masuk ke pengalaman.
Praktik Terbaik untuk Pra-Memuat
- Hanya pramuat aset penting, tidak seluruh Workspace .Anda mungkin mendapatkan pop-in sesekali, tetapi itu mengurangi waktu pemuatan dan umumnya tidak mengganggu pengalaman pemain.Aset yang merupakan kandidat yang baik untuk pra-memuat termasuk yang diperlukan untuk layar pemuatan, UI, atau area awal.
- Biarkan pemain melewati layar pemuatan, atau secara otomatis melewatkannya setelah jumlah waktu tertentu.
Contoh Kode
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.")
Rangkuman
Properti
Digunakan oleh ContentProvider untuk mengunduh aset dari situs web Roblox.
Memberikan jumlah item di antrian permintaan ContentProvider yang perlu diunduh.
Metode
Mendapatkan Enum.AssetFetchStatus saat ini dari contentId yang disediakan.
Sinyal yang menyala saat Enum.AssetFetchStatus dari konten yang disediakan berubah.
Menghasilkan sampai semua aset yang terkait dengan yang diberikan Instances telah dimuat.
Acara
Properti
BaseUrl
Digunakan oleh ContentProvider untuk mengunduh aset dari situs web Roblox.
URL ini menunjuk ke situs web yang dihosting oleh Roblox dari mana aset diunduh dan diambil dari file AppSettings.xml, yang terletak di folder hash versi.
Dimungkinkan untuk menulis ulang properti ini menggunakan fungsi ContentProvider:SetBaseUrl() di bilah perintah; namun, ini tidak direkomendasikan dan dapat menyebabkan masalah pemuatan aset.
RequestQueueSize
Memberikan jumlah item di antrian permintaan ContentProvider yang perlu diunduh.
Item ditambahkan ke antrian permintaan klien saat aset digunakan untuk pertama kalinya atau ContentProvider:PreloadAsync() dipanggil.
Pengembang disarankan untuk tidak menggunakan RequestQueueSize untuk membuat bilah pemuatan.Ini karena ukuran antrian dapat meningkat dan berkurang seiring waktu saat aset baru ditambahkan dan diunduh.Pengembang yang ingin menampilkan kemajuan pemuatan harus memuat aset satu per satu (lihat contoh di bawah ini).
Contoh Kode
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")
Metode
GetAssetFetchStatus
Mendapatkan Enum.AssetFetchStatus saat ini dari contentId yang disediakan. Gunakan GetAssetFetchStatusChangedSignal() untuk mendengarkan perubahan pada nilai ini.
Parameter
ID konten untuk mengambil status.
Memberikan nilai
The Enum.AssetFetchStatus dari konten.
Contoh Kode
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
Sinyal yang menyala saat Enum.AssetFetchStatus dari konten yang disediakan berubah.Hubungkan ke sinyal ini dengan menggunakan panggil balas dengan satu argumen tipe Enum.AssetFetchStatus .Ini sangat berguna untuk aset yang mungkin diperbarui secara otomatis seperti thumbnail pengguna saat mereka mengganti pakaian.
Parameter
Memberikan nilai
Contoh Kode
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
Parameter
Memberikan nilai
RegisterSessionEncryptedAsset
Parameter
Memberikan nilai
UnregisterDefaultEncryptionKey
Memberikan nilai
UnregisterEncryptedAsset
Parameter
Memberikan nilai
PreloadAsync
Menghasilkan sampai semua aset yang terkait dengan yang diberikan Instances telah dimuat.Ini dapat digunakan untuk menghentikan skrip dan tidak menggunakan konten sampai dipastikan bahwa konten telah dimuat ke dalam pengalaman.
Saat dipanggil, mesin mengidentifikasi tautan ke konten untuk setiap item dalam daftar.Untuk salah satu dari Instances yang memiliki properti yang mendefinisikan tautan ke konten, seperti Decal atau Sound, mesin mencoba memuat aset ini dari Roblox.Untuk setiap aset yang diminta, fungsi panggil balasan dijalankan, menunjukkan aset terakhir Enum.AssetFetchStatus .
Jika salah satu aset gagal load, pesan kesalahan muncul di output.Metode itu sendiri tidak akan berhasil dan akan terus mengeksekusi sampai telah memproses setiap kejadianyang diminta.
Keterbatasan
SurfaceAppearance dan MaterialVariant tidak didukung oleh PreloadAsync() karena objek ini bergantung pada aset teks yang diproses daripada langsung memuat teks individual.Memanggilnya pada instance SurfaceAppearance tidak akan melakukan apa-apa, tetapi teksur terkait masih akan diputar selama runtime.
Parameter
Serangkaian instansi untuk load.
Fungsi yang dipanggil saat setiap permintaan aset selesai. Kembalikan string content dan aset terakhir Enum.AssetFetchStatus.
Memberikan nilai
Contoh Kode
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))