ContentProvider
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
ゲームにコンテンツ (アセット) をロードするサービス。
Roblox サーバーは、実行時にすべてのアセットをクライアントにストリームします:ワークスペースのオブジェクト、メッシュアセット、テクスチャアセットなどメッシュビジュアルデータ、テクスチャ、デカル、サウンドなどのアセットは、ストリーミング が有効になっているかどうかにかかわらず、必要に応じてストリーミングされます。
いくつかの場合、この動作は不適切であり、コンテンツがエクスペリエンスにロードされる前に遅延が発生する可能性があります。
ContentProvider は、ContentProvider:PreloadAsync() メソッドを使用して、アセットをエクスペリエンスにプリロードできます。ロードスクリーンを表示したり、クリティカルなアセットをプリロードしたりして、プレイヤーをエクスペリエンスに入れる前に許可したい場合があります。
プリロードのベストプラクティス
- 必須のアセットのみを事前ロードし、 全体の Workspace はありません。時折ポップアップが表示される可能性がありますが、ロード時間が短縮され、プレイヤーエクスペリエンスが一般的に中断されません。プリロードの候補となるアセットには、ロード画面、UI、またはスタートエリアに必要なものが含まれます。
- プレイヤーがロード画面をスキップするか、一定の時間後に自動的にスキップするようにします。
コードサンプル
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.
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 リクエストキューのアイテム数を指定します。
方法
提供された Enum.AssetFetchStatus の現在の contentId を取得します。
提供されたコンテンツの Enum.AssetFetchStatus が変更されたときに発射するシグナル。
指定された Instances に関連するすべてのアセットがロードされるまで、生成します。
イベント
プロパティ
BaseUrl
ContentProvider によって Roblox ウェブサイトからアセットをダウンロードするのに使用されます。
この URL は、アセットがダウンロードされ、バージョンハッシュフォルダにある AppSettings.xml ファイルから抽出される Roblox ホストウェブサイトを指しています。
コマンドバーの ContentProvider:SetBaseUrl() 機能を使用してこのプロパティを上書きすることは可能ですが、これは推奨されず、アセットロードの問題を引き起こす可能性があります。
RequestQueueSize
ダウンロードする必要がある ContentProvider リクエストキューのアイテム数を指定します。
アセットが初めて使用されたり、ContentProvider:PreloadAsync() が呼び出されたとき、アイテムはクライアントのリクエストキューに追加されます。
開発者は、リクエストキュールサイズを使用してロードバーを作成しないようにアドバイスされます。これは、新しいアセットが追加されてダウンロードされるにつれて、キューのサイズが増加したり減少したりする可能性があるためです。ロード進行状況を表示しようとする開発者は、アセットを 1 つずつロードする必要があります (下の例を参照)。
コードサンプル
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.
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() を使用します。
パラメータ
ステータスを取得するコンテンツの ID。
戻り値
コードサンプル
Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.
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 型の 1つの引数を使用したコールバックを使用します。これは、ユーザーが服を変更すると自動的に更新される可能性のあるアセット、例えばユーザーのサムネイルが特に便利です。
パラメータ
戻り値
コードサンプル
Retrieves the initial Enum.AssetFetchStatus of an asset and listens for future updates.
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)
UnregisterDefaultEncryptionKey
戻り値
UnregisterEncryptedAsset
パラメータ
戻り値
PreloadAsync
指定された Instances に関連するすべてのアセットがロードされるまで、生成します。これを使用すると、スクリプトを一時停止して、コンテンツがエクスペリエンスにロードされたことを確認するまでコンテンツを使用しないようにできます。
呼び出されると、エンジンはリストの各アイテムに対するコンテンツへのリンクを識別します。コンテンツへのリンクを定義するプロパティを持つ Instances のどれか、例えば Decal または Sound がある場合、エンジンは Roblox からこれらのアセットをロードしようとします。リクエストされたアセットごとに、コールバック関数が実行され、アセットの最終 Enum.AssetFetchStatus を示します。
アセットのいずれかがロードできない場合、出力にエラーメッセージが表示されます。メソッド自体はエラーしませんし、リクエストされたすべてのインスタンスを処理するまで実行を続けます。
制限
SurfaceAppearance と MaterialVariant は、個々のテクスチャを直接ロードするのではなく、処理されたテクスチャパック資産に依存するため、PreloadAsync() ではサポートされていません。SurfaceAppearance インスタンスで呼び出すと何も起こらないが、関連するテクスチャは依然としてランタイム中にストリーミングされる。
パラメータ
ロードするインスタンスのアレ読み込む。
アセットリクエストが完了するたびに呼び出される機能。content 文字列とアセットの最終 Enum.AssetFetchStatus を返します。
戻り値
コードサンプル
In this code sample, a sound and a texture are preloaded using Sound and Decal instances.
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))