ContentProvider

Hiển Thị Bản Đã Lỗi Thời

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Không Thể Tạo
Dịch Vụ
Không Sao Chép

Dịch vụ tải nội dung (tài sản) vào một trò chơi.

Các máy chủ Roblox phát tất cả các tài sản đến khách hàng trong thời gian thực hiện: các đối tượng trong Workspace, tài sản khối lượng, tài sản kết cấu, v.v.Các tài sản như dữ liệu hình ảnh mesh, kết cấu, decal và âm thanh được phát theo yêu cầu, bất kể có bật phát trực tuyến hay không.

Trong một số trường hợp, hành vi này không mong muốn, vì nó có thể dẫn đến một sự chậm trễ trước khi nội dung tải vào trải nghiệm.

ContentProvider cho phép bạn tải trước tài nguyên vào trải nghiệm bằng cách sử dụng phương pháp ContentProvider:PreloadAsync().Bạn có thể muốn hiển thị màn hình tải, tiền xử lý các tài sản quan trọng, và chỉ sau đó cho phép người chơi vào trải nghiệm.

Tốt nhất cho Preloading

  • Chỉ tiền xử lý trước các tài sản cốt lõi, không toàn bộ Workspace .Bạn có thể nhận được bật lên thỉnh thoảng, nhưng nó làm giảm thời gian tải và thường không làm gián đoạn trải nghiệm người chơi.Các tài sản là ứng viên tốt cho tiền xử lý bao gồm những tài sản cần thiết cho màn hình tải, giao diện người dùng hoặc khu vực khởi động.
  • Hãy cho phép người chơi bỏ qua màn hình tải, hoặc tự động bỏ qua sau một khoảng thời gian nhất định.

Mẫu mã

Trong ví dụ này, một Decal và Sound được tải trước vào một trò chơi. Sau khi hoàn thành tải xong, script sẽ in một thông điệp ra đầu ra.

Nhà cung cấp nội dung

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

Tóm Tắt

Thuộc Tính

Phương Pháp

Thuộc Tính

BaseUrl

Chỉ Đọc
Không Sao Chép
Đọc Song Song

Sử dụng bởi ContentProvider để tải tài sản từ trang web Roblox.

URL này chỉ vào một trang web được lưu trữ của Roblox từ đó các tài nguyên được tải xuống và được kéo từ tập tin AppSettings.xml, nằm trong thư mục version-hash.

Bạn có thể ghi đè lại thuộc tính này bằng chức năng ContentProvider:SetBaseUrl() trong thanh lệnh; tuy nhiên, điều này không được khuyến khích và có thể gây ra vấn đề tải tài sản.

RequestQueueSize

Chỉ Đọc
Không Sao Chép
Đọc Song Song

Cung cấp số lượng vật phẩm trong hàng đợi yêu cầu ContentProvider cần phải tải xuống.

Các mục được thêm vào hàng đợi yêu cầu của khách hàng khi một tài sản được sử dụng lần đầu tiên hoặc ContentProvider:PreloadAsync() được gọi.

Các nhà phát triển được khuyên không nên sử dụng RequestQueueSize để tạo thanh tải.Điều này là do kích thước hàng đợi có thể tăng và giảm theo thời gian khi các tài sản mới được thêm và tải xuống.Các nhà phát triển muốn hiển thị tiến trình tải nên tải tài nguyên một lúc (xem ví dụ dưới đây).

Mẫu mã

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

Phương Pháp

GetAssetFetchStatus

Nhận được hiện tại Enum.AssetFetchStatus của contentId được cung cấp. Sử dụng GetAssetFetchStatusChangedSignal() để lắng nghe các thay đổi đối với giá trị này.

Tham Số

contentId: ContentId

ID của nội dung để lấy trạng thái.

Giá Trị Mặc Định: ""

Lợi Nhuận

Mẫu mã

Lấy lại ban đầu Enum.AssetFetchStatus của một tài sản và lắng nghe các bản cập nhật trong tương lai.

Theo dõi tình trạng AssetFetch

local ContentProvider = game:GetService("ContentProvider")
-- Một ví dụ tài sản để tải
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Xuất tình trạng AssetFetch hiện tại của tài sản
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Lắng nghe cập nhật
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Kích hoạt tài sản để preload
local function onAssetRequestComplete(contentId: string, assetFetchStatus: Enum.AssetFetchStatus)
print(`Preload status {contentId}: {assetFetchStatus.Name}`)
end
ContentProvider:PreloadAsync({ exampleAsset }, onAssetRequestComplete)

GetAssetFetchStatusChangedSignal

Một tín hiệu bắt lửa khi Enum.AssetFetchStatus của nội dung cung cấp thay đổi.Kết nối với tín hiệu này bằng cách sử dụng một callback với một tham số kiểu Enum.AssetFetchStatus .Điều này đặc biệt hữu ích cho các tài sản có thể tự động cập nhật như hình ảnh của một người khi họ thay đổi quần áo.

Tham Số

contentId: ContentId
Giá Trị Mặc Định: ""

Lợi Nhuận

Mẫu mã

Lấy lại ban đầu Enum.AssetFetchStatus của một tài sản và lắng nghe các bản cập nhật trong tương lai.

Theo dõi tình trạng AssetFetch

local ContentProvider = game:GetService("ContentProvider")
-- Một ví dụ tài sản để tải
local ASSET_ID = "rbxassetid://9120386436"
local exampleAsset = Instance.new("Sound")
exampleAsset.SoundId = ASSET_ID
-- Xuất tình trạng AssetFetch hiện tại của tài sản
local initialAssetFetchStatus = ContentProvider:GetAssetFetchStatus(ASSET_ID)
print("Initial AssetFetchStatus:", initialAssetFetchStatus)
-- Lắng nghe cập nhật
local assetFetchStatusChangedSignal = ContentProvider:GetAssetFetchStatusChangedSignal(ASSET_ID)
local function onAssetFetchStatusChanged(newAssetFetchStatus: Enum.AssetFetchStatus)
print(`New AssetFetchStatus: {newAssetFetchStatus}`)
end
assetFetchStatusChangedSignal:Connect(onAssetFetchStatusChanged)
-- Kích hoạt tài sản để preload
local function onAssetRequestComplete(contentId: string, assetFetchStatus: Enum.AssetFetchStatus)
print(`Preload status {contentId}: {assetFetchStatus.Name}`)
end
ContentProvider:PreloadAsync({ exampleAsset }, onAssetRequestComplete)

ListEncryptedAssets


Lợi Nhuận

RegisterDefaultEncryptionKey

()

Tham Số

encryptionKey: string
Giá Trị Mặc Định: ""

Lợi Nhuận

()

RegisterDefaultSessionKey

()

Tham Số

sessionKey: string
Giá Trị Mặc Định: ""

Lợi Nhuận

()

RegisterEncryptedAsset

()

Tham Số

assetId: ContentId
Giá Trị Mặc Định: ""
encryptionKey: string
Giá Trị Mặc Định: ""

Lợi Nhuận

()

RegisterSessionEncryptedAsset

()

Tham Số

contentId: ContentId
Giá Trị Mặc Định: ""
sessionKey: string
Giá Trị Mặc Định: ""

Lợi Nhuận

()

UnregisterDefaultEncryptionKey

()

Lợi Nhuận

()

UnregisterEncryptedAsset

()

Tham Số

assetId: ContentId
Giá Trị Mặc Định: ""

Lợi Nhuận

()

PreloadAsync

()
Sinh Lợi

Sản xuất cho đến khi tất cả các tài sản liên quan đến Instances đã được tải.Nó có thể được sử dụng để tạm dừng một kịch bản và không sử dụng nội dung cho đến khi chắc chắn rằng nội dung đã được tải vào trải nghiệm.

Khi gọi, động cơ xác định liên kết đến nội dung cho mỗi mục trong danh sách.Đối với bất kỳ Instances nào có các thuộc tính xác định liên kết đến nội dung, chẳng hạn như một Decal hoặc một Sound, động cơ cố gắng tải các tài sản này từ Roblox.Đối với mỗi tài sản được yêu cầu, chức năng gọi lại chạy, cho thấy tài sản cuối cùng Enum.AssetFetchStatus .

Nếu bất kỳ tài sản nào không thể tải, một thông báo lỗi xuất hiện trong đầu ra.Chính phương pháp sẽ không có lỗi và nó sẽ tiếp tục thực thi cho đến khi đã xử lý mỗi ví ví dụ / trường hợpđược yêu cầu.

Hạn chế

SurfaceAppearanceMaterialVariant không được hỗ trợ bởi PreloadAsync() vì các đối tượng này dựa vào tài nguyên kết cấu xử lý thay vì trực tiếp tải các kết cấu riêng lẻ.Gọi nó trên một ví dụ SurfaceAppearance sẽ không làm bất cứ điều gì, nhưng các kết cấu liên quan vẫn sẽ được phát trong quá trình chạy.

Tham Số

contentIdList: Array

Một loạt các ví dụ để tải.

Giá Trị Mặc Định: ""
callbackFunction: function

Chức năng được gọi khi mỗi yêu cầu tài sản hoàn thành. Trả về chuỗi content và tài sản cuối cùng Enum.AssetFetchStatus .

Giá Trị Mặc Định: "nil"

Lợi Nhuận

()

Mẫu mã

Trong ví dụ mã này, một âm thanh và một kết cấu được tải trước bằng cách sử dụng SoundDecal ví dụ.

Tải trước tài sản

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,
}
-- Điều này sẽ bị đánh khi mỗi tài sản được giải quyết
local callback = function(assetId, assetFetchStatus)
print("PreloadAsync() resolved asset ID:", assetId)
print("PreloadAsync() final AssetFetchStatus:", assetFetchStatus)
end
-- Tải trước nội dung và thời gian nó
local startTime = os.clock()
ContentProvider:PreloadAsync(assets, callback)
local deltaTime = os.clock() - startTime
print(("Preloading complete, took %.2f seconds"):format(deltaTime))

Sự Kiện

AssetFetchFailed

Tham Số

assetId: ContentId