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

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

Hanya Baca
Tidak Direplikasi
Baca Paralel

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.

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 Enum.AssetFetchStatus saat ini dari contentId yang disediakan. Gunakan GetAssetFetchStatusChangedSignal() untuk mendengarkan perubahan pada nilai ini.

Parameter

contentId: ContentId

ID konten untuk mengambil status.

Nilai Default: ""

Memberikan nilai

Contoh Kode

Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.

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

contentId: ContentId
Nilai Default: ""

Memberikan nilai

Contoh Kode

Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.

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

()

Parameter

encryptionKey: string
Nilai Default: ""

Memberikan nilai

()

RegisterDefaultSessionKey

()

Parameter

sessionKey: string
Nilai Default: ""

Memberikan nilai

()

RegisterEncryptedAsset

()

Parameter

assetId: ContentId
Nilai Default: ""
encryptionKey: string
Nilai Default: ""

Memberikan nilai

()

RegisterSessionEncryptedAsset

()

Parameter

contentId: ContentId
Nilai Default: ""
sessionKey: string
Nilai Default: ""

Memberikan nilai

()

UnregisterDefaultEncryptionKey

()

Memberikan nilai

()

UnregisterEncryptedAsset

()

Parameter

assetId: ContentId
Nilai Default: ""

Memberikan nilai

()

PreloadAsync

()
Hasil

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

contentIdList: Array

Serangkaian instansi untuk load.

Nilai Default: ""
callbackFunction: function

Fungsi yang dipanggil saat setiap permintaan aset selesai. Kembalikan string content dan aset terakhir Enum.AssetFetchStatus.

Nilai Default: "nil"

Memberikan nilai

()

Contoh Kode

In this code sample, a sound and a texture are preloaded using Sound and Decal instances.

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