ContentProvider

แสดงที่เลิกใช้งานแล้ว

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

ไม่สามารถสร้าง
บริการ
ไม่ซ้ำ

บริการที่โหลดเนื้อหา (สินทรัพย์) เข้าสู่เกม

เซิร์ฟเวอร์ Roblox สตรีมทรัพยากรทั้งหมดไปยังไคลเอนต์ในระหว่างการทำงาน: วัตถุในพื้นที่ทำงาน, สินทรัพย์เมช, สินทรัพย์เทกเจอร์ ฯลฯสินทรัพย์เช่นข้อมูลภาพเสมือนจริงเทกเจอร์ลายพิมพ์และเสียงถูกสตรีมตามที่จำเป็นไม่ว่าจะเปิดใช้งานการสตรีม สตรีม หรือไม่

ในบางกรณี พฤติกรรมนี้ไม่พึงประสงค์เนื่องจากอาจทำให้เกิดความล่าช้าก่อนที่เนื้อหาจะโหลดลงในประสบการณ์

ContentProvider ช่วยให้คุณสามารถโหลดสินทรัพย์ล่วงหน้าในประสบการณ์โดยใช้วิธี ContentProvider:PreloadAsync()คุณอาจต้องการแสดงหน้าจอโหลด, โหลดสินทรัพย์สําคัญล่วงหน้า, และอนุญาตให้ผู้เล่นเข้าสู่ประสบการณ์เท่านั้น

การปฏิบัติที่ดีที่สุดสำหรับการโหลดล่วงหน้า

  • เฉพาะการโหลดล่วงหน้าทรัพยากรที่จำเป็นเท่านั้น, ไม่ ทั้งหมด Workspaceคุณอาจได้รับป๊อปอินบ้าง แต่มันลดเวลาในการโหลดและไม่ทำให้ประสบการณ์ผู้เล่นขัดขวางโดยทั่วไปสินทรัพย์ที่เป็นผู้สมัครที่ดีสำหรับการโหลดล่วงหน้ารวมถึงสิ่งที่จำเป็นสำหรับหน้าจอโหลด อินเทอร์เฟซผู้ใช้ หรือพื้นที่เริ่มต้น
  • ให้ผู้เล่นข้ามหน้าจอโหลด หรือข้ามโดยอัตโนมัติหลังจากระยะเวลาหนึ่ง

ตัวอย่างโค้ด

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

สรุป

คุณสมบัติ

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    ใช้โดย ContentProvider เพื่อดาวน์โหลดสินทรัพย์จากเว็บไซต์ Roblox

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    ให้จำนวนรายการในคิวคำขอ ContentProvider ที่ต้องดาวน์โหลด

วิธีการ

คุณสมบัติ

BaseUrl

อ่านอย่างเดียว
ไม่ซ้ำ
อ่านพร้อมๆ กัน

ใช้โดย ContentProvider เพื่อดาวน์โหลดสินทรัพย์จากเว็บไซต์ Roblox

URL นี้ชี้ไปที่เว็บไซต์โฮสต์ของ Roblox ซึ่งทรัพยากรถูกดาวน์โหลดและดึงมาจากไฟล์ AppSettings.xml ที่ตั้งอยู่ในโฟลเดอร์ version-hash

เป็นไปได้ที่จะเขียนทับคุณสมบัตินี้โดยใช้ฟังก์ชัน ContentProvider:SetBaseUrl() ในแถบคําสั่ง แต่ไม่แนะนําและอาจทําให้เกิดปัญหาการโหลดสินทรัพย์

RequestQueueSize

อ่านอย่างเดียว
ไม่ซ้ำ
อ่านพร้อมๆ กัน

ให้จำนวนรายการในคิวคำขอ ContentProvider ที่ต้องดาวน์โหลด

รายการจะถูกเพิ่มลงในคิวคำขอของไคลเอนต์เมื่อมีการใช้สินทรัพย์เป็นครั้งแรกหรือเรียก ContentProvider:PreloadAsync()

นักพัฒนาควรหลีกเลี่ยงการใช้ RequestQueueSize เพื่อสร้างแถบโหลดเนื่องจากขนาดคิวสามารถเพิ่มและลดได้ตามเวลาเมื่อมีการเพิ่มและดาวน์โหลดสินทรัพย์ใหม่นักพัฒนาที่ต้องการแสดงความคืบหน้าในการโหลดควรโหลดสินทรัพย์หนึ่งครั้งต่อเวลา (ดูตัวอย่างด้านล่าง)

ตัวอย่างโค้ด

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

วิธีการ

GetAssetFetchStatus

รับปัจจุบัน Enum.AssetFetchStatus ของ contentId ที่ให้ไว้ ใช้ GetAssetFetchStatusChangedSignal() เพื่อฟังการเปลี่ยนแปลงของค่านี้

พารามิเตอร์

contentId: ContentId

ID ของเนื้อหาที่จะดึงสถานะ

ค่าเริ่มต้น: ""

ส่งค่ากลับ

เนื้อหา Enum.AssetFetchStatus ของเนื้อหา

ตัวอย่างโค้ด

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

สัญญาณที่จะยิงเมื่อ Enum.AssetFetchStatus ของเนื้อหาที่ให้มาเปลี่ยนแปลงเชื่อมต่อกับสัญญาณนี้โดยใช้การโทรกลับด้วยอาร์กิวเมนต์หนึ่งของประเภท Enum.AssetFetchStatusเป็นประโยชน์อย่างยิ่งสำหรับสินทรัพย์ที่อาจอัปเดตโดยอัตโนมัติเช่นภาพนิ่งของผู้ใช้เมื่อเปลี่ยนเสื้อผ้า

พารามิเตอร์

contentId: ContentId
ค่าเริ่มต้น: ""

ส่งค่ากลับ

ตัวอย่างโค้ด

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


ส่งค่ากลับ

RegisterDefaultEncryptionKey

()

พารามิเตอร์

encryptionKey: string
ค่าเริ่มต้น: ""

ส่งค่ากลับ

()

RegisterDefaultSessionKey

()

พารามิเตอร์

sessionKey: string
ค่าเริ่มต้น: ""

ส่งค่ากลับ

()

RegisterEncryptedAsset

()

พารามิเตอร์

assetId: ContentId
ค่าเริ่มต้น: ""
encryptionKey: string
ค่าเริ่มต้น: ""

ส่งค่ากลับ

()

RegisterSessionEncryptedAsset

()

พารามิเตอร์

contentId: ContentId
ค่าเริ่มต้น: ""
sessionKey: string
ค่าเริ่มต้น: ""

ส่งค่ากลับ

()

UnregisterDefaultEncryptionKey

()

ส่งค่ากลับ

()

UnregisterEncryptedAsset

()

พารามิเตอร์

assetId: ContentId
ค่าเริ่มต้น: ""

ส่งค่ากลับ

()

PreloadAsync

()
ผลตอบแทน

ผลผลิตจนกว่าทรัพยากรทั้งหมดที่เกี่ยวข้องกับที่กำหนด Instances จะโหลดเสร็จสิ่งนี้สามารถใช้เพื่อหยุดการทำงานของสคริปต์และไม่ใช้เนื้อหาจนกว่าจะแน่ใจว่าเนื้อหาถูกโหลดลงในประสบการณ์แล้ว

เมื่อเรียก เครื่องยนต์จะระบุลิงก์ไปยังเนื้อหาสำหรับแต่ละรายการในรายการสำหรับใดๆ ของ Instances ซึ่งมีคุณสมบัติที่กำหนดลิงก์ไปยังเนื้อหา เช่น Decal หรือ Sound เครื่องยนต์พยายามโหลดสินทรัพย์เหล่านี้จาก Robloxสำหรับแต่ละสินทรัพย์ที่ร้องขอ, ฟังก์ชันการโทรกลับจะทำงาน, ระบุถึงสินทรัพย์สุดท้าย Enum.AssetFetchStatus

หากสินทรัพย์ใดไม่สามารถโหลดได้ ข้อความข้อผิดพลาดจะปรากฏในออกผลวิธีการด้วยตัวเองจะไม่ผิดพลาดและจะดำเนินการต่อจนกว่าจะประมวลผลแต่ละตัวอย่างที่ร้องขอแล้ว

ข้อจํากัด

SurfaceAppearance และ MaterialVariant ไม่ได้รับการสนับสนุนจาก PreloadAsync() เนื่องจากวัตถุเหล่านี้พึ่งพาทรัพยากรแพ็คเทกเจอร์ที่ประมวลผลมากกว่าการโหลดเทกเจอร์แบบเดี่ยวโดยตรงการเรียกใช้บนตัวอย่าง SurfaceAppearance จะไม่ทำอะไร แต่เทกเจอร์ที่เกี่ยวข้องจะยังคงถูกสตรีมในระหว่างการทำงาน

พารามิเตอร์

contentIdList: Array

ชุดของตัวอย่างที่จะโหลด

ค่าเริ่มต้น: ""
callbackFunction: function

ฟังก์ชันที่เรียกเมื่อแต่ละคำขอสินทรัพย์สําเร็จ คืนสตริง content และสินทรัพย์สุดท้าย Enum.AssetFetchStatus

ค่าเริ่มต้น: "nil"

ส่งค่ากลับ

()

ตัวอย่างโค้ด

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

อีเวนต์

AssetFetchFailed

พารามิเตอร์

assetId: ContentId