roblox-avatar-appearance について
Roblox 開発者向けに、服、髪、肌の外見を探し、検証、プレビューして設定するスキルです。カタログ API の手順と、属性に応じた外見の選択を扱います。
主な機能
- 01カタログ API によるアセット検索
- 02衣服テンプレート ID の解決
- 03ヘアアクセサリーの検証
- 04候補をレンダリングして選択
- 05属性に応じた肌と髪の色選択
- 06キャラクター別の外見指定
活用シーン
- 01Creator Store の検索外で着用可能な服を探す
- 02カタログのシャツやパンツを使用可能なテンプレートに変換
- 03キーワードと検証で写実的な髪型を選ぶ
- 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 で、これは別の番号です。それぞれ次の手順で解決します。
InsertService:LoadAsset(assetId)を使います — SERVER データモデル内でのみ動作します(クライアント/Edit ではブロックされます)。- 読み込んだモデルの子である
Shirt.ShirtTemplateを読み取ります。これが使用可能なテンプレート ID です(:match("%d+"))。 - 実際のオブジェクトとして適用します:
shirt.ShirtTemplate = "rbxassetid://<templateId>"(またはhttp://www.roblox.com/asset/?id=<id>)を設定し、shirt.Parent = modelとします。Pants も同じように設定します。
髪(およびその他のアクセサリー):検証してから手作業で選ぶ
- 候補が本物の髪かどうか検証します:
HumanoidDescriptionのdesc.HairAccessory = tostring(id)を設定し、Players:CreateHumanoidModelFromDescription(desc, Enum.HumanoidRigType.R15)を実行して、子孫のAccessoryの数が 0 より大きいことを確認します。「髪」の検索結果には、有効な HairAccessory ではないものが数多く含まれています。 - キーワードが重要です: 一般的な
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 では、実在の選手の顔を似せて再現することはできません。顔の類似ではなく、表情のバリエーションを出すために、汎用的なクラシック顔を少数使用してください。