ContentProvider
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
コンテンツ (アセット) をゲームにロードするサービス。
Roblox サーバーは、実行時にクライアントにすべてのアセットをストリームします:ワークスペースのオブジェクト、メッシュアセット、テクスチャアセットなど。Mesh ビジュアルデータ、テクスチャ、デカール、サウンドなどのアセットは、ストリーミングが有効になっているかどうかにかかわらず、必要に応じてストリームされます。
この動作は、コンテンツがエクスペリエンスにロードされる前に遅延につながるため、いくつかの場合、この動作は望ましくありません。
ContentProvider は、ContentProvider:PreloadAsync() メソッドを使用して、エクスペリエンスにアセットをプレロードできます。ロード画面を表示し、クリティカルアセットをプレロードし、その後、プレイヤーをエクスペリエンスに許可する必要があります。
プレロードのベストプラクティス
- 必要なアセットのみをプリロードし、 ワークスペース全体ではない をする。時々ポップアップが表示されるかもしれませんが、ロード時間が短縮され、プレイヤーエクスペリエンスが一般的に影響されることはありません。プリロードに適しているアセットは、ロード画面、UI またはスタートエリアなどで必要です。
- プレイヤーがロード画面をスキップするか、一定の時間後に自動的にスキップするようにします。
コードサンプル
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 リクエストキューにあるアイテムの数を指定します。
方法
提供された ContentID の現在の Empty.AssetFetchStatus を取得します。
提供されたコンテンツの Enum.AssetFetchStatus が変更されるときに発信する信号。
Class.Instance|Instances に関連するすべてのアセットが読み込まれるまで。
イベント
プロパティ
BaseUrl
Class.ContentProvider は、Roblox ウェブサイトからアセットをダウンロードするために使用します。
この URL は、アセットを AppSettings.xml ファイル、バージョンハッシュフォルダにある Roblox ホストされたウェブサイトからダウンロードし、アプセット設定ファイルから削除するようにします。
コマンドバーにある ContentProvider:SetBaseUrl() 関数を使用してこのプロパティを上書きできますが、これはお勧めではありません。また、アセットの読み込み問題を引き起こす可能性があります。
RequestQueueSize
Class.ContentProvider リクエストキューにあるアイテムの数を指定します。
アセットが初めて使用されると、クライアントのリクエストキューに追加されます。また、ContentProvider:PreloadAsync() が呼び出されるときには、Class.ContentProvider:PreloadAsync が呼び出されます。
開発者は、RequestQueueSize を使用してロードバーを作成しないことをお勧めします。これは、新しいアセットが追加され、ダウンロードされるにつれて、クエージサイズが両方増加して減少するためです。ロード進行状況を表示する開発者は、アセットを一度にロードする必要があります (下の例を参照してください)。
コードサンプル
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> を使用して、この値の変更をリスニングします。
パラメータ
ステータスを取得するコンテンツの ID。
戻り値
コードサンプル
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 つあります。これは、ユーザーが服を変更するときなど、自動的に更新されるアセットにとって便利です。
パラメータ
戻り値
コードサンプル
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 に関連するすべてのアセットが読み込まれるまで、スクリプトを一時停止し、コンテンツをエクスペリエンスにロードするまで、コンテンツを使用できません。これを使用すると、スクリプトを一時停止し、コンテンツをエクスペリエンスにロードするまで、コンテンツを使用できません。
呼び出されると、エンジンは、リストにある各アイテムのコンテンツに対するリンクを含むコンテンツのリンクを確認します。For any of the Instances which have properties that define links to content, such as a Decal
このメソッドは、コンテンツ ID のストリングのリストを受け入れることもできますが、これらのストリングは 画像 アセットに対応する必要があります。コンテンツ ID のストリングを使用して、非画像アセットを読み込んでも失敗する可能性があります。
アセットの 1 つが読み込むみ込まれないと、出力にエラーメッセージが表示されます。メソッド自体はエラーしないので、要求されたインスタンスまたはアセット ID を処理するまで続行します。
パラメータ
イメージを読み込むインスタンスまたはコンテンツ ID 配列。
各アセットリクエストが完了するときに呼び出されます。content ストリングとアセットの最終 Enum.AssetFetchStatus を返します。
戻り値
コードサンプル
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))