ContentProvider

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

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

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

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

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

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

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

เทคนิคการปรีโหลด

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

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

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

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

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

RequestQueueSize

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

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

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

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

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

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

รหัสของเนื้อหาที่จะดึงสถานะสำหรับ


ส่งค่ากลับ

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

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

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

ส่งค่ากลับ

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

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

void

พารามิเตอร์

encryptionKey: string

ส่งค่ากลับ

void

RegisterDefaultSessionKey

void

พารามิเตอร์

sessionKey: string

ส่งค่ากลับ

void

RegisterEncryptedAsset

void

พารามิเตอร์

assetId: ContentId
encryptionKey: string

ส่งค่ากลับ

void

RegisterSessionEncryptedAsset

void

พารามิเตอร์

contentId: ContentId
sessionKey: string

ส่งค่ากลับ

void

UnregisterDefaultEncryptionKey

void

ส่งค่ากลับ

void

UnregisterEncryptedAsset

void

พารามิเตอร์

assetId: ContentId

ส่งค่ากลับ

void

PreloadAsync

void
ผลตอบแทน

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

Robloxสำหรับใด ๆ ของ Instances

วิธีนี้ยังสามารถรับรายการ ID เนื้อหาได้ อย่างไรก็ตาม เหล่านี้ต้องตรงกับ รูปภาพ สินทรัพย์ การพยายามโหลดสินทรัพย์นอกรูปภาพผ่านการใช้สตริง ID เนื้อหาจะส่งผลให้ล้มเหลว

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

พารามิเตอร์

contentIdList: Array

รายการหรือสตริง ID ของอินสแตนซ์หรือเนื้อหา (สำหรับภาพ) ที่จะโหลด

callbackFunction: function

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

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

ส่งค่ากลับ

void

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

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