mcpField
U
unity-scriptableobject

unity-scriptableobject

github.com/besty0728開発1.9k91 回インストール今日更新
リポジトリ

unity-scriptableobject について

UnityのScriptableObjectデータアセットを作成・管理するスキル群です。プロジェクトデータの検索、編集、移行を行う開発者向けで、シリアライズ済みプロパティの操作やJSONのインポート・エクスポートに対応します。

主な機能

  1. 01ScriptableObjectアセットの作成と複製
  2. 02アセット検索と型一覧の取得
  3. 03通常・シリアライズ済みプロパティの読み取り
  4. 04フィールドやネストしたプロパティの一括設定
  5. 05JSONのインポートとエクスポート
  6. 06アセットの削除

活用シーン

  1. 01プロジェクトデータアセットの作成や複製
  2. 02指定した型のScriptableObjectを検索
  3. 03ネストしたフィールド、配列、オブジェクト参照を編集
  4. 04JSONを使ったデータ移行

インストール

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

$npx skills add https://github.com/besty0728/unity-skills --skill unity-scriptableobject

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

詳細

このモジュールのスキルを呼び出す前に: 名前や説明から推測したパラメーターでスキルを呼び出そうとしている場合は、いったん停止し、まずこのファイルを読むか、GET /skills/recommend?includeSchema=true でスキーマを取得してください。recommend/schema からパラメーター定義をすでに取得している場合は、そのまま dryRun に進めます。

トリガー

  • SO データアセットの作成または編集
  • SO インスタンスの検索
  • SO 管理のスクリプト化
  • ScriptableObject データアセットの作成または編集、SO インスタンスの検索、SO 管理のスクリプト化

ScriptableObject スキル

ScriptableObject アセットを作成、管理します。

動作モード

  • Approval:このモジュールは混在しています。scriptableobject_get/scriptableobject_get_serialized_properties/scriptableobject_list_types/scriptableobject_find/scriptableobject_export_json は SkillMode.SemiAuto に設定されており、直接実行できます(scriptableobject_export_json に savePath を渡すとファイルに保存されるため、ReadOnly ではなく MutatesAssets = true に設定されています)。書き込み系スキル(scriptableobject_create/scriptableobject_set/scriptableobject_set_batch/scriptableobject_set_serialized_property/scriptableobject_set_serialized_property_batch/scriptableobject_duplicate/scriptableobject_import_json)は SkillMode.FullAuto に設定されており、1 回の実行ごとに grant が必要です。
  • Auto / Bypass:FullAuto は直接実行されます。
  • NeverInSemi を含む高リスクスキル:scriptableobject_delete(Operation.Delete)。このスキルは Approval/Auto では MODE_FORBIDDEN を返し、Bypass または Allowlist に該当する場合のみ呼び出せます。

禁止事項(よくある誤認):

  • scriptableobject_create_type は存在しません → テンプレート "ScriptableObject" を指定して script_create で SO スクリプトを作成してください
  • scriptableobject_get_properties/scriptableobject_read は存在しません → scriptableobject_get(リフレクションビュー)または scriptableobject_get_serialized_properties(Inspector/シリアライズビュー)を使用してください
  • scriptableobject_set_property/scriptableobject_set_field は存在しません → scriptableobject_set(トップレベルのパブリックフィールド)または scriptableobject_set_serialized_property(ネスト、配列、参照、プライベート)を使用してください
  • scriptableobject_save は存在しません → 変更はアセットに自動保存されます

ルーティング:

  • ScriptableObject スクリプトの作成には → テンプレート "ScriptableObject" を指定して script モジュールを使用してください
  • JSON のインポート/エクスポートには → このモジュールの scriptableobject_import_json/scriptableobject_export_json を使用してください
  • セッターの選択:scriptableobject_set/scriptableobject_set_batch で操作できるのは、リフレクションによるトップレベルのパブリックな単純フィールドのみです。ネストされたパス、配列/リスト、オブジェクト参照、プライベートな [SerializeField] フィールド、グラデーション、カーブ、[Flags] 列挙型には → scriptableobject_set_serialized_property(および _batch)を使用してください。

スキル

scriptableobject_create

新しい ScriptableObject アセットを作成します。 パラメーター:

  • typeName(string):ScriptableObject の型名。
  • savePath(string):アセットの保存先パス。
scriptableobject_get

ScriptableObject のプロパティを取得します。 パラメーター:

  • assetPath(string):アセットパス。
scriptableobject_set

リフレクションを使用して、ScriptableObject のトップレベルのパブリックフィールド/プロパティを設定します。ネストされたパス、配列、オブジェクト参照、プライベートな [SerializeField] フィールドには scriptableobject_set_serialized_property を使用してください。 パラメーター:

  • assetPath(string):アセットパス。
  • fieldName(string):フィールド名またはプロパティ名。
  • value(string):設定する値。component_set_property と同様に、メンバーの型に応じて解析されます(bool は true/false/1/0/yes/no/on/off を指定できます。それ以外は拒否されます。AnimationCurve はプリセット、または以下の JSON カーブとして指定します)。
scriptableobject_list_types

プロジェクト内で利用可能な ScriptableObject の型を一覧表示します。 パラメーター:

  • filter(string、任意):名前で絞り込みます。
scriptableobject_duplicate

ScriptableObject アセットを複製します。 パラメーター:

  • assetPath(string):複製する元のアセットパス。
scriptableobject_set_batch

複数のフィールドを一度に ScriptableObject に設定します。フィールド:JSON オブジェクト {fieldName: value, ...}

パラメーター型必須デフォルト説明
assetPathstringはい-ScriptableObject のアセットパス
fieldsstringはい-フィールドと値のペアを含む JSON オブジェクト。例:{"fieldName": "value", ...}

戻り値: { success, fieldsSet, failed, results: [{ field, error }] }:書き込み可能な public フィールド/プロパティではないキーや、型が値を受け付けないキーは個別に失敗し(results に記載されます)、ほかのキーは引き続き設定されます。不正な fields JSON は、何も書き込まれる前に拒否されます。

scriptableobject_get_serialized_properties

ScriptableObject アセットの Inspector シリアライズ済みプロパティを一覧表示します。シリアライズ済みフィールドごとに、propertyPath、型、現在の値を返します。これには private [SerializeField] やネストされた子要素/配列の子要素も含まれます。返された propertyPath の値は scriptableobject_set_serialized_property で使用してください。

パラメーター型必須デフォルト説明
assetPathstringはい-ScriptableObject のアセットパス
includeChildrenboolいいえtrueネストされた子プロパティ/配列の子プロパティを再帰的にたどります
limitintいいえ200返すプロパティの最大数

戻り値: { success, path, typeName, properties: [{ propertyPath, name, displayName, propertyType, type, isArray, editable, value }] }

scriptableobject_set_serialized_property

propertyPath を指定して、Inspector のシリアライズ済みプロパティを1つ設定します。scriptableobject_set では設定できないネストされたフィールド、配列/リスト、UnityEngine.Object 参照、private [SerializeField] フィールド、グラデーション、アニメーションカーブ、[Flags] 列挙型に対応しています。

パラメーター型必須デフォルト説明
assetPathstringはい-対象の ScriptableObject のアセットパス
propertyPathstringはい-シリアライズ済みプロパティのパス(下記の構文を参照)。speed は自動的に m_Speed/_speed にフォールバックします
valuestringいいえnull設定する値(形式はプロパティの型によって異なります)
valueAssetPathstringいいえnullObjectReference プロパティの場合:参照するアセットのアセットパス
valueObjectTypestringいいえnull参照するアセットの任意の型フィルター(例:"Sprite"。サブアセットで便利です)

propertyPath の構文:

  • トップレベルのフィールド:speed
  • ネストされたフィールド:stats.maxHp
  • 配列/リストの要素:items.Array.data[2]
  • 配列/リストのサイズ変更:value: "5" を指定して items.Array.size を設定します(最初にサイズを変更し、その後に要素を設定します)

値の形式:

  • プリミティブ型:"3.5"/"true"/"hello"(bool:true/false/1/0/yes/no/on/off)。ベクトル:"1,2,3"。色:"1,0,0,1"。列挙型:名前、またはメンバーのインデックスとして 0~n-1 の数値(値が異なる場合は warnings エントリにメンバー名が示されます。より大きな数値はメンバー値または宣言済みビットとして扱われ、宣言されていないビットは拒否されます)
  • [Flags] 列挙型:カンマ区切りの名前 "Fire,Ice"(| も使用できます)、または最後のメンバーインデックスより大きい生のビットマスク数値("-1" は Everything。より小さい数値は、通常の列挙型と同様にメンバーインデックスです)
  • ObjectReference:valueAssetPath: "Assets/Icons/sword.png" を渡します(任意で valueObjectType も指定できます)。解除するには value: "null" を指定します
  • グラデーション:{"colorKeys":[{"color":"1,0,0,1","time":0},{"color":"0,0,1,1","time":1}],"alphaKeys":[{"alpha":1,"time":0},{"alpha":1,"time":1}],"mode":"Blend"}
  • アニメーションカーブ:{"keys":[{"time":0,"value":0},{"time":1,"value":1,"inTangent":2,"outTangent":2}],"preWrapMode":"ClampForever","postWrapMode":"Loop"}

戻り値: { success, assetPath, propertyPath, valueSet, warnings? }。値が拒否された場合、何も書き込まれません。不明な propertyPath が指定された場合、自己修正用に error と availableProperties(先頭60件)を返します。

scriptableobject_set_serialized_property_batch

1 回の呼び出しで、1 つの ScriptableObject アセットに対して複数の Inspector シリアライズ済みプロパティを設定します。

パラメータ型必須デフォルト説明
assetPathstringはい-対象 ScriptableObject のアセットパス
itemsstringはい-{propertyPath, value, valueAssetPath, valueObjectType} の JSON 配列

items の例: [{"propertyPath":"items.Array.size","value":"2"},{"propertyPath":"items.Array.data[0]","value":"101"},{"propertyPath":"icon","valueAssetPath":"Assets/Icons/sword.png"}]

戻り値: { success, totalItems, successCount, failCount, results }

scriptableobject_delete

ScriptableObject アセットを削除します。

パラメータ型必須デフォルト説明
assetPathstringはい-削除する ScriptableObject のアセットパス

戻り値: { success, deleted }

scriptableobject_find

型名で ScriptableObject アセットを検索します。

パラメータ型必須デフォルト説明
typeNamestringはい-検索する ScriptableObject の型名
searchPathstringいいえ"Assets"検索対象のフォルダーパス
limitintいいえ50返す結果の最大数

戻り値: { success, count, assets }

scriptableobject_export_json

ScriptableObject を JSON にエクスポートします。

パラメータ型必須デフォルト説明
assetPathstringはい-エクスポートする ScriptableObject のアセットパス
savePathstringいいえnullJSON を書き込むファイルパス。省略すると、代わりに JSON をインラインで取得します

戻り値: savePath を指定した場合は { success, path }(JSON はそのまま返されません)、それ以外の場合は { success, json } です。

savePath を指定すると書き込みになります。 これを指定すると、このスキルは File.WriteAllText を実行するため、MutatesAssets = true かつ ReadOnly ではないとフラグが立ちます。ただし、SkillMode.SemiAuto のままです(どのモードでも許可は不要です)。ScriptableObject の値を読み取るだけなら、savePath を省略しておく限りディスクへのコストはかかりません。また、2 つの戻り値の形は排他的である点に注意してください。つまり、データを読み取りたかったのに savePath を渡してしまうと、2 回目の呼び出しが必要になります。

scriptableobject_import_json

JSON データを ScriptableObject にインポートします。受け付ける形式は 2 つあります:

  • 素のフィールドオブジェクト {"hp": 100, "title": "Boss"} — 適用前に {"MonoBehaviour": {...}} へ自動的にラップされます
  • scriptableobject_export_json が生成する {"MonoBehaviour": {...}} エンベロープ
パラメータ型必須デフォルト説明
assetPathstringはい-対象 ScriptableObject のアセットパス
jsonstringいいえnullインポートする JSON 文字列
jsonFilePathstringいいえnull読み込んでインポートする JSON ファイルのパス

戻り値: { success, assetPath }。シリアライズ済みフィールドが 1 つも変更されなかった場合(フィールド名が一致しなかった、または値がすでに等しかった場合)は、success: true に加えて warning を返します。この warning は「何も書き込まれなかった」と解釈し、scriptableobject_export_json の出力と照らし合わせてフィールド名を確認してください。


正確なシグネチャ

正確な名前、パラメータ、デフォルト、戻り値は、このファイルではなく GET /skills/schema または unity_skills.get_skill_schema() によって定義されます。

コメント