unity-scriptableobject について
UnityのScriptableObjectデータアセットを作成・管理するスキル群です。プロジェクトデータの検索、編集、移行を行う開発者向けで、シリアライズ済みプロパティの操作やJSONのインポート・エクスポートに対応します。
主な機能
- 01ScriptableObjectアセットの作成と複製
- 02アセット検索と型一覧の取得
- 03通常・シリアライズ済みプロパティの読み取り
- 04フィールドやネストしたプロパティの一括設定
- 05JSONのインポートとエクスポート
- 06アセットの削除
活用シーン
- 01プロジェクトデータアセットの作成や複製
- 02指定した型のScriptableObjectを検索
- 03ネストしたフィールド、配列、オブジェクト参照を編集
- 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, ...}
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| assetPath | string | はい | - | ScriptableObject のアセットパス |
| fields | string | はい | - | フィールドと値のペアを含む 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 で使用してください。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| assetPath | string | はい | - | ScriptableObject のアセットパス |
| includeChildren | bool | いいえ | true | ネストされた子プロパティ/配列の子プロパティを再帰的にたどります |
| limit | int | いいえ | 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] 列挙型に対応しています。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| assetPath | string | はい | - | 対象の ScriptableObject のアセットパス |
| propertyPath | string | はい | - | シリアライズ済みプロパティのパス(下記の構文を参照)。speed は自動的に m_Speed/_speed にフォールバックします |
| value | string | いいえ | null | 設定する値(形式はプロパティの型によって異なります) |
| valueAssetPath | string | いいえ | null | ObjectReference プロパティの場合:参照するアセットのアセットパス |
| valueObjectType | string | いいえ | 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 シリアライズ済みプロパティを設定します。
| パラメータ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| assetPath | string | はい | - | 対象 ScriptableObject のアセットパス |
| items | string | はい | - | {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 アセットを削除します。
| パラメータ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| assetPath | string | はい | - | 削除する ScriptableObject のアセットパス |
戻り値: { success, deleted }
scriptableobject_find
型名で ScriptableObject アセットを検索します。
| パラメータ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| typeName | string | はい | - | 検索する ScriptableObject の型名 |
| searchPath | string | いいえ | "Assets" | 検索対象のフォルダーパス |
| limit | int | いいえ | 50 | 返す結果の最大数 |
戻り値: { success, count, assets }
scriptableobject_export_json
ScriptableObject を JSON にエクスポートします。
| パラメータ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| assetPath | string | はい | - | エクスポートする ScriptableObject のアセットパス |
| savePath | string | いいえ | null | JSON を書き込むファイルパス。省略すると、代わりに 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": {...}}エンベロープ
| パラメータ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| assetPath | string | はい | - | 対象 ScriptableObject のアセットパス |
| json | string | いいえ | null | インポートする JSON 文字列 |
| jsonFilePath | string | いいえ | null | 読み込んでインポートする JSON ファイルのパス |
戻り値: { success, assetPath }。シリアライズ済みフィールドが 1 つも変更されなかった場合(フィールド名が一致しなかった、または値がすでに等しかった場合)は、success: true に加えて warning を返します。この warning は「何も書き込まれなかった」と解釈し、scriptableobject_export_json の出力と照らし合わせてフィールド名を確認してください。
正確なシグネチャ
正確な名前、パラメータ、デフォルト、戻り値は、このファイルではなく GET /skills/schema または unity_skills.get_skill_schema() によって定義されます。