はじめに
Marketplace のアニメーションを 自分のプレースに保存する方法です。
事前準備
今回は、ModuleScript にコードを書きます。
ReplicatedStorage に AssetSearch という名前で作成します。

コマンドバーで実行するので、コマンドバーを表示します。
(ウィンドウ ⟩ スクリプト ⟩ コマンドバー)
私はマルチコマンドバーを有効にしています。
(ファイル ⟩ ベータ機能 ⟩ マルチラインコマンドバー)

API リファレンス AssetService.LoadAssetAsync() によると
自分が所有していないアセットを読み込むには、Roblox Studio 側の設定が必要のようです。
以下は引用です。
(私の場合、無効化しているプロジェクトでもスクリプトは動作したのですが、うまくいかない場合は見てみるといいかもしれません。)
InsertService:LoadAsset()とは異なり、このメソッドはサードパーティ(体験作成者が所有していないアセット)によって作成された公開アセットを読み込むことができます。この機能を有効にするには、Studioの体験設定でサードパーティアセットの読み込みを許可をオンにします。
この設定が無効の場合(デフォルトでは無効)、LoadAssetAsyncは体験作成者が所有しているアセットのみを読み込み、古いInsertService:LoadAsset()セキュリティチェックと同様に動作します。
アセットID をもとにアニメーションを取得する
Marketplace で アセットID を確認します。
catalog/ に続く数字がアセットのIDです。

スクリプト(AssetSearch):
local AssetSearch = {}
local AssetService = game:GetService("AssetService")
function AssetSearch.AssetServiceLoadAsset(assetId: number)
local success, model = pcall(AssetService.LoadAssetAsync, AssetService, assetId)
if success and model then
print("✅モデルが正常に読み込まれました")
model.Name = `{model.Name}_{assetId}`
model.Parent = workspace
else
warn("🟨モデルの読み込みに失敗しました: ", model) -- 'model'にはエラーメッセージが含まれます
end
end
return AssetSearch
関数の呼び出し例:
local AssetSearch = require(game.ReplicatedStorage.AssetSearch)
AssetSearch.AssetServiceLoadAsset(14353423348)
バンドルIDをもとにアニメーションを取得する
Marketplace で バンドルID を確認します。
bundles/ に続く数字がバンドルのIDです。

スクリプト(AssetSearch):
local AssetSearch = {}
local AssetService = game:GetService("AssetService")
-- assetId の配列を渡して、アセットのモデルを読み込む。保存先は、Workspace.LoadedAssets フォルダ(新規作成)
function AssetSearch.AssetServiceLoadAssetArray(assetIds: {number})
local folder = Instance.new("Folder")
folder.Name = "LoadedAssets"
folder.Parent = workspace
local successCount = 0
for i, assetId in assetIds do
local success, model = pcall(AssetService.LoadAssetAsync, AssetService, assetId)
if success and model then
model.Name = `{model.Name}_{i}_{assetId}`
model.Parent = folder
successCount += 1
else
warn(`🟨モデルの読み込みに失敗しました: [{i}]{assetId}: {model}`) -- 'model'にはエラーメッセージが含まれます
end
end
print(`🔵読み込み完了: {successCount} / {#assetIds} 件成功しました。 Workspace.{folder.Name} に保存しました。`)
end
-- Bundle のもつアセットを配列で取得する。 bundleId、 item.Type を指定
function AssetSearch.GetBundleAssets(bundleId, itemType: string)
local resultAssets = {}
local success, bundleInfo = pcall(function()
return AssetService:GetBundleDetailsAsync(bundleId)
end)
if success then
for _, item in bundleInfo.Items do
if item.Type == itemType then
table.insert(resultAssets, item)
end
end
else
warn("🟨情報の取得に失敗しました: ", bundleInfo)
end
print(`🔵取得処理完了: BundleId: {bundleInfo.Id}, BundleName: {bundleInfo.Name}, 対象: {#resultAssets} / {#bundleInfo.Items} 件`)
return resultAssets
end
return AssetSearch
関数の呼び出し例:
local AssetSearch = require(game.ReplicatedStorage.AssetSearch)
local assets = AssetSearch.GetBundleAssets(2623795, "Asset")
if #assets > 0 then
local assetIds = {}
for _, item in assets do
table.insert(assetIds, item.Id)
end
AssetSearch.AssetServiceLoadAssetArray(assetIds)
end
実行結果:
Workspace 直下に LoadedAssets フォルダを作成して、保存します。
バンドルに複数アセットが入っているので、モデルも複数あります。

おわりに
取得したアニメーションを見てみます。
保存した Model 内にアニメーションがあるので、アニメーションIDをメモします。AnimationId の id= の数字部分を使います。

アニメーションを再生するためのキャラクターを追加します。
Rthro アバターを選びました。

アニメーションエディタを開き、追加したキャラクターを選択します。「Rig」が追加されます。
うまく映っていないのですが、アニメーションエディタの「顔編集」上のあたりに「…」があります。
インポート ⟩ Robloxから を選択します。

AssetConfiguration が表示されるので、メモしておいたアニメーションのID(数字部分)を入力してインポートします。

再生ボタンを押してアニメーションを見ます。
参考
公式リファレンス


