ContentProvider

非推奨を表示

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

作成できません
サービス
複製されていません

コンテンツ (アセット) をゲームにロードするサービス。

Roblox サーバーは、実行時にクライアントにすべてのアセットをストリームします:ワークスペースのオブジェクト、メッシュアセット、テクスチャアセットなど。Mesh ビジュアルデータ、テクスチャ、デカール、サウンドなどのアセットは、ストリーミングが有効になっているかどうかにかかわらず、必要に応じてストリームされます。

この動作は、コンテンツがエクスペリエンスにロードされる前に遅延につながるため、いくつかの場合、この動作は望ましくありません。

ContentProvider は、ContentProvider:PreloadAsync() メソッドを使用して、エクスペリエンスにアセットをプレロードできます。ロード画面を表示し、クリティカルアセットをプレロードし、その後、プレイヤーをエクスペリエンスに許可する必要があります。

プレロードのベストプラクティス

  • 必要なアセットのみをプリロードし、 ワークスペース全体ではない をする。時々ポップアップが表示されるかもしれませんが、ロード時間が短縮され、プレイヤーエクスペリエンスが一般的に影響されることはありません。プリロードに適しているアセットは、ロード画面、UI またはスタートエリアなどで必要です。
  • プレイヤーがロード画面をスキップするか、一定の時間後に自動的にスキップするようにします。

コードサンプル

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

概要

プロパティ

  • 読み取り専用
    複製されていません
    並列読み取り

    Class.ContentProvider は、Roblox ウェブサイトからアセットをダウンロードするために使用します。

  • 読み取り専用
    複製されていません
    並列読み取り

    Class.ContentProvider リクエストキューにあるアイテムの数を指定します。

方法

プロパティ

BaseUrl

読み取り専用
複製されていません
並列読み取り

Class.ContentProvider は、Roblox ウェブサイトからアセットをダウンロードするために使用します。

この URL は、アセットを AppSettings.xml ファイル、バージョンハッシュフォルダにある Roblox ホストされたウェブサイトからダウンロードし、アプセット設定ファイルから削除するようにします。

コマンドバーにある ContentProvider:SetBaseUrl() 関数を使用してこのプロパティを上書きできますが、これはお勧めではありません。また、アセットの読み込み問題を引き起こす可能性があります。

RequestQueueSize

読み取り専用
複製されていません
並列読み取り

Class.ContentProvider リクエストキューにあるアイテムの数を指定します。

アセットが初めて使用されると、クライアントのリクエストキューに追加されます。また、ContentProvider:PreloadAsync() が呼び出されるときには、Class.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

提供された itemId の現在の enuem.AssetFetchStatus を取得します。0>Class.ContentProvider:GetAssetFetchStatusChangedSignal()|GetAssetFetchStatusChangedSignal()0> を使用して、この値の変更をリスニングします。

パラメータ

contentId: ContentId

ステータスを取得するコンテンツの ID。


戻り値

コードサンプル

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

ContentProvider のコンテンツが変更されると、信号が発動します。この信号には、<code> Enumerate.AssetFetchStatus</code> のオーバーライドを使用して接続するコールバックが 1 つあります。これは、ユーザーが服を変更するときなど、自動的に更新されるアセットにとって便利です。

パラメータ

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 に関連するすべてのアセットが読み込まれるまで、スクリプトを一時停止し、コンテンツをエクスペリエンスにロードするまで、コンテンツを使用できません。これを使用すると、スクリプトを一時停止し、コンテンツをエクスペリエンスにロードするまで、コンテンツを使用できません。

呼び出されると、エンジンは、リストにある各アイテムのコンテンツに対するリンクを含むコンテンツのリンクを確認します。For any of the Instances which have properties that define links to content, such as a Decal

このメソッドは、コンテンツ ID のストリングのリストを受け入れることもできますが、これらのストリングは 画像 アセットに対応する必要があります。コンテンツ ID のストリングを使用して、非画像アセットを読み込んでも失敗する可能性があります。

アセットの 1 つが読み込むみ込まれないと、出力にエラーメッセージが表示されます。メソッド自体はエラーしないので、要求されたインスタンスまたはアセット 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