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 dijalankan: objek di Workspace, aset meshes, aset tekstur, dll. Asset seperti data visual meshes, tekstur, decal, dan suara di streamed sebagai diperlukan, terlepas dari apakah Streaming diaktifkan.
Dalam beberapa kasus, perilaku ini tidak diinginkan, karena dapat menyebabkan kelambatan sebelum konten dimuat ke dalam pengalaman.
ContentProvider memungkinkan Anda untuk mempré-load aset ke dalam pengalaman menggunakan metode ContentProvider:PreloadAsync(). Anda mungkin ingin menampilkan layar pemuatan, mempré-load aset kritis, dan hanya kemudian mengizinkan pemain ke dalam pengalaman.
Praktik Terbaik untuk P pra-memuat
- Hanya prasetel aset yang penting, bukan seluruh Workspace. Anda mungkin mendapatkan pop-in sesekali, tetapi itu mengurangi waktu pemuatan dan umumnya tidak mengganggu pengalaman pemain. Aset yang baik untuk prasetel termasuk yang dibutuhkan untuk layar pemuatan, UI, atau area pemulai.
- Biarkan pemain melewati layar pemuatan, atau secara otomatis melewati setelah jumlah waktu tertentu.
Contoh Kode
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 dalam ContentProvider request queue yang perlu diunduh.
Metode
Mendapatkan status Enum.AssetFetchStatus saat ini dari contentId yang diberikan.
Sinyal yang diaktifkan saat Enum.AssetFetchStatus dari konten yang disediakan berubah.
Menghasilkan sampai semua sumber daya yang terkait dengan Instances yang diberikan telah dimuat.
Acara
Properti
BaseUrl
Digunakan oleh ContentProvider untuk mengunduh aset dari situs web Roblox.
URL ini menunjuk ke situs web Roblox yang dihosting dari mana aset diunduh dan diangkat dari file AppSettings.xml, yang berada di direktori penyimpanan versi.
Mungkin 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 dalam ContentProvider request queue yang perlu diunduh.
Item ditambahkan ke antrian permintaan klien saat aset digunakan untuk pertama kalinya atau ContentProvider:PreloadAsync() dipanggil.
Pengembang diperingatkan untuk tidak menggunakan RequestQueueSize untuk mengembangkan bilah pemuatan. Ini karena ukuran antrian dapat meningkat dan menurun saat barang baru ditambahkan dan diunduh. Pengembang yang mencari untuk menampilkan progress pemuatan harus memuat aset satu per satu (lihat contoh di bawah).
Contoh Kode
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 status Enum.AssetFetchStatus saat ini dari contentId yang diberikan. Gunakan GetAssetFetchStatusChangedSignal() untuk mendengarkan perubahan nilai ini.
Parameter
ID dari konten untuk mengambil status untuk.
Memberikan nilai
Menu.AssetFetchStatus konten.
Contoh Kode
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 diaktifkan ketika status Enum.AssetFetchStatus dari konten yang disediakan berubah. Hubungkan ke sinyal ini dengan menggunakan panggilan dengan satu argumen jenis Enum.AssetFetchStatus . Ini sangat berguna untuk aset yang mungkin memperbarui diri secara otomatis seperti thumbnail pengguna saat mereka mengubah pakaian.
Parameter
Memberikan nilai
Contoh Kode
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)
RegisterSessionEncryptedAsset
Parameter
Memberikan nilai
UnregisterDefaultEncryptionKey
Memberikan nilai
UnregisterEncryptedAsset
Parameter
Memberikan nilai
PreloadAsync
Menghasilkan sampai semua aset yang terkait dengan Instances yang diberikan telah dimuat. Ini dapat digunakan untuk menghentikan skrip dan tidak menggunakan konten sampai konten telah dimuat ke dalam pengalaman.
Ketika dianggil, mesin mengidentifikasi tautan ke konten untuk setiap item dalam daftar. Untuk setiap dari Instances yang memiliki property yang mendefinisikan tautan ke konten, seperti Decal atau
Metode ini juga dapat mengambil daftar ID konten, namun daftar ini harus sesuai dengan gambar aset. Mencoba untuk memuat aset non-image melalui penggunaan daftar ID konten mereka akan menyebabkan kegagalan.
Jika salah satu dari sumber daya tidak dapat load, pesan kesalahan muncul di keluaran. Metode itu sendiri tidak akan mengalami kesalahan dan akan terus mengeksekusi sampai itu telah memproses setiap instans atau ID aset yang diminta.
Parameter
Sebuah matriks阵 instans atau string ID konten (untuk gambar) untuk load.
Fungsi yang dipanggil setiap kali permintaan aset selesai. Mengembalikan string content dan status akhir Enum.AssetFetchStatus aset.
Memberikan nilai
Contoh Kode
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))