mcpField
R
roblox-avatar-appearance

roblox-avatar-appearance

github.com/flatbedjクリエイティブ・メディア049 回インストール6 週間前に更新
リポジトリ

roblox-avatar-appearance について

Roblox 開発者向けに、服、髪、肌の外見を探し、検証、プレビューして設定するスキルです。カタログ API の手順と、属性に応じた外見の選択を扱います。

主な機能

  1. 01カタログ API によるアセット検索
  2. 02衣服テンプレート ID の解決
  3. 03ヘアアクセサリーの検証
  4. 04候補をレンダリングして選択
  5. 05属性に応じた肌と髪の色選択
  6. 06キャラクター別の外見指定

活用シーン

  1. 01Creator Store の検索外で着用可能な服を探す
  2. 02カタログのシャツやパンツを使用可能なテンプレートに変換
  3. 03キーワードと検証で写実的な髪型を選ぶ
  4. 04国やキャラクター ID に基づく一貫した外見の生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/flatbedj/roblox-skills --skill roblox-avatar-appearance

インストール後、Claude Code で/roblox-avatar-appearanceを入力して読み込まれたか確認します。

詳細

Roblox アバターの外見パイプライン

アバターに本物らしく、多様で、正確な服装・髪型・肌色を与える方法 — 見落とされがちなポイントです。

中心的な問題

Studio の search_asset MCP ツールで検索できるのは Creator Store(開発用アセット:モデル/画像/デカール)だけで、アバターの Marketplace(服/アクセサリー)は検索できません。また、検索で見つかるサッカー選手やキャラクターの「ジャージ」モデルは、300 以上のパーツからなる 3D メッシュで、着用できる服としては使いものになりません。そのため、カタログ Web API を使う必要があります。

カタログ Web API からアセットを取得する(突破口)

カタログ検索エンドポイントに WebFetch を使うと、カテゴリ/サブカテゴリのフィルターを指定して、キーワードに一致するアセット ID を取得できます。

https://catalog.roblox.com/v1/search/items?category=Clothing&subcategory=ClassicShirts&keyword=<X>&limit=10
  • limit は必ず 10 または 28 にしてください。 6/20 を指定すると HTTP 400 が返されます。category=Accessories と creatorTargetId も 400 になります。
  • 使用できるサブカテゴリ:ClassicShirts、ClassicTShirts、ClassicPants。髪の場合、category=Clothing で検索しても役に立ちません。代わりに、STYLE のキーワードでアクセサリーを検索してください(下記参照)。
  • エンドポイントから返されるのはアセット ID のみです。詳細は次の手順で解決します。

シャツ/パンツ:アセット ID → 使用可能な ShirtTemplate ID

カタログから取得できるのはシャツのアセット ID ですが、Shirt オブジェクトに必要なのは ShirtTemplate 画像の ID で、これは別の番号です。それぞれ次の手順で解決します。

  1. InsertService:LoadAsset(assetId) を使います — SERVER データモデル内でのみ動作します(クライアント/Edit ではブロックされます)。
  2. 読み込んだモデルの子である Shirt.ShirtTemplate を読み取ります。これが使用可能なテンプレート ID です(:match("%d+"))。
  3. 実際のオブジェクトとして適用します:shirt.ShirtTemplate = "rbxassetid://<templateId>"(または http://www.roblox.com/asset/?id=<id>)を設定し、shirt.Parent = model とします。Pants も同じように設定します。

髪(およびその他のアクセサリー):検証してから手作業で選ぶ

  1. 候補が本物の髪かどうか検証します: HumanoidDescription の desc.HairAccessory = tostring(id) を設定し、Players:CreateHumanoidModelFromDescription(desc, Enum.HumanoidRigType.R15) を実行して、子孫の Accessory の数が 0 より大きいことを確認します。「髪」の検索結果には、有効な HairAccessory ではないものが数多く含まれています。
  2. キーワードが重要です: 一般的な hair/classic hair というキーワードでは、ほとんどがトゲトゲしたアニメ風の UGC が返されます。STYLE で検索してください:buzz cut hair、afro hair、man bun hair、curly fade、dreadlocks、slicked back hair、headband hair — こうしたキーワードなら、現実的なスタイルが見つかります。本物のクラシック Roblox ヘアはアーカイブされているか、検索できないようです。現実的な UGC を代わりに使うのが実用的です。

手作業で選ぶためのレンダリング(IDだけをうのみにしない)

  • ViewportFrame は暗くレンダリングされます — 候補を番号付き BillboardGui とともに照明のある workspace のリグに表示し、screen_capture で撮影して、見た目のよいものや象徴的なものを目視で選びます。
  • 空の HumanoidDescription では体が黒くなります。 生成する前に、肌色になるよう desc.HeadColor、TorsoColor、LeftArmColor などの色フィールドを設定してください。そうしないとプレビューが使いものになりません。
  • ショットの間、リグが動かないようにアクセサリーを溶接し、パーツを固定します。撮影後は一時的なリグフォルダーを片付け、カメラを元に戻し(CameraType = Custom、Freecam を再度有効化)てください。

国籍/アイデンティティに応じた肌色と髪色

ランダムではなく、アイデンティティごとにもっともらしい外見にするには、国籍(またはチーム/陣営)をキーにした、小規模な重み付き分布テーブルを使い、カード/キャラクター ID の安定したハッシュ値で選択します。

  • SKIN = 8 色程度の肌色パレット(明るい色→濃い色)。NATION_SKIN[nation] = {weighted indices}(同じインデックスを繰り返すと選ばれやすくなります)。skinFor(nation, hash) = SKIN[pool[(hash % #pool) + 1]] とし、未知の国籍には全色から選ぶフォールバックを設定します。
  • 同じ方法で、HAIR_COLORS(黒→ブロンド→グレー)と NATION_HAIR[nation] = {weighted indices} を設定します。選んだ色で髪のメッシュの Handle.Color に色を付けると、少数のメッシュセットでも多様な髪型に見えます。
  • 実際のゲーム内で確認します:適切な国籍に暗い肌色を割り当て、北欧にはブロンドを割り当て、多様な陣営では明るい色から暗い色まで幅を持たせます。

カード/キャラクターごとのシグネチャー上書き

MARQUEE キャラクターがランダムなハッシュ値による選択ではなく、常に見分けられるようにするには、ID をキーにした上書きマップを追加し、最初に確認します。

local CARD_HAIR: { [string]: string } = { ["some-star-id"] = "<hairAssetId>" }
-- in generate(): local hair = CARD_HAIR[id] or HAIR[(hash // k) % #HAIR + 1]

シグネチャーキット/肌色にも同じパターンを使えます。

⚠️ IP に関する注意

実在するブランドのキットやロゴには、商標上のリスクがあります。偽装したブランドや、ブランドを連想させる表現を優先するか、プロジェクト所有者の明示的な許可を得た場合に限り、実在するブランドを使用してください。Roblox では、実在の選手の顔を似せて再現することはできません。顔の類似ではなく、表情のバリエーションを出すために、汎用的なクラシック顔を少数使用してください。

コメント