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

Dalam contoh ini, Decal dan Suara dimuat sebelumnya ke dalam permainan. Setelah mereka menyelesaikan pemuatan skrip akan mencetak pesan ke output.

Penyedia Konten

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

Mengambil awal Enum.AssetFetchStatus dari aset dan mendengarkan pembaruan masa depan.

Memantau AssetFetchStatus

local ContentProvider = game:GetService("ContentProvider")
-- Aset contoh untuk dimuat
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Keluarkan status AssetFetch saat ini dari aset
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Dengarkan untuk pembaruan
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Aktifkan aset untuk pra-memuat
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

Mengambil awal Enum.AssetFetchStatus dari aset dan mendengarkan pembaruan masa depan.

Memantau AssetFetchStatus

local ContentProvider = game:GetService("ContentProvider")
-- Aset contoh untuk dimuat
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Keluarkan status AssetFetch saat ini dari aset
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Dengarkan untuk pembaruan
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Aktifkan aset untuk pra-memuat
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

Dalam contoh kode ini, suara dan tekstur dimuat sebelumnya menggunakan Sound dan Decal instansi.

Memuat Aset Sebelumnya

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,
}
-- Ini akan dipukul saat setiap aset diselesaikan
local callback = function(assetId, assetFetchStatus)
print("PreloadAsync() resolved asset ID:", assetId)
print("PreloadAsync() final AssetFetchStatus:", assetFetchStatus)
end
-- Prerender konten dan waktunya
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