ContentProvider

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat
Layanan
Tidak Direplikasi

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

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.")

Rangkuman

Properti

Metode

Properti

BaseUrl

Hanya Baca
Tidak Direplikasi
Baca Paralel

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

Hanya Baca
Tidak Direplikasi
Baca Paralel

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

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")

Metode

GetAssetFetchStatus

Mendapatkan status Enum.AssetFetchStatus saat ini dari contentId yang diberikan. Gunakan GetAssetFetchStatusChangedSignal() untuk mendengarkan perubahan nilai ini.

Parameter

contentId: ContentId

ID dari konten untuk mengambil status untuk.


Memberikan nilai

Menu.AssetFetchStatus konten.

Contoh Kode

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

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

contentId: ContentId

Memberikan nilai

Contoh Kode

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


Memberikan nilai

RegisterDefaultEncryptionKey

void

Parameter

encryptionKey: string

Memberikan nilai

void

RegisterDefaultSessionKey

void

Parameter

sessionKey: string

Memberikan nilai

void

RegisterEncryptedAsset

void

Parameter

assetId: ContentId
encryptionKey: string

Memberikan nilai

void

RegisterSessionEncryptedAsset

void

Parameter

contentId: ContentId
sessionKey: string

Memberikan nilai

void

UnregisterDefaultEncryptionKey

void

Memberikan nilai

void

UnregisterEncryptedAsset

void

Parameter

assetId: ContentId

Memberikan nilai

void

PreloadAsync

void
Hasil

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

contentIdList: Array

Sebuah matriks阵 instans atau string ID konten (untuk gambar) untuk load.

callbackFunction: function

Fungsi yang dipanggil setiap kali permintaan aset selesai. Mengembalikan string content dan status akhir Enum.AssetFetchStatus aset.

Nilai Default: "nil"

Memberikan nilai

void

Contoh Kode

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))

Acara

AssetFetchFailed

Parameter

assetId: ContentId