mcpField
C
create-2d-physics

create-2d-physics

github.com/unity-technologies開発1.2k1.3k 回インストール1 日前に更新
リポジトリ

create-2d-physics について

Unity の 2D 物理を扱う開発者向けのスキルです。Core と Legacy のどちらを使うかを判別し、復元ポイントを保ちながら、ドキュメントに沿った変更と実行時検証を進めます。

主な機能

  1. 01Core と Legacy の物理システム判別
  2. 02基準動作の確認と復元ポイント作成
  3. 03Unity のバージョンに合うドキュメント参照
  4. 04シーンのコンポーネントと実行時動作の検証
  5. 05変更範囲の限定と一時ログの削除

活用シーン

  1. 01Unity シーンの 2D 物理コンポーネントの追加・設定
  2. 022D 物理スクリプトや挙動の診断
  3. 03物理変更が実行時に機能するかの確認

インストール

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

$npx skills add https://github.com/unity-technologies/skills --skill create-2d-physics

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

SECURITY.md
references/
2d-physics-core.md
legacy-2d-physics.md

詳細

Unity 2D 物理の作成と修正

3D 物理の選択肢は検討しないでください。ユーザーが 3D を意味していると根拠から判断できた場合は、その旨を伝えて終了してください。

重要

  • 各手順で Unity CLI(unity command --format json)と unity-cli および unity-pipeline スキルを使用してください。
  • 変更を加える前に現在の動作のベースラインを確立し、後の結果が実際に変更によるものか判断できるようにしてください。
  • 変更が失敗した場合にロールバックできる復元ポイントを作成してください。
  • 依頼されたことだけを行ってください。無関係なアセットやファイルは変更しないでください。
  • 一時的な Debug.Log 行でランタイムの動作を検証したら、それらを削除してください。ユーザーはログ出力を依頼しておらず、残った行はスクリプトやコンソールを散らかすためです。依頼されていない安定判定や永続的なログ出力は実装しないでください。最終手順を参照してください。
  • API を見つけるために型をリフレクションで調べないでください。代わりにメンバーページを取得してください。例外はシステムプローブです。
eval への C# の渡し方

eval はファイルではなくステートメントブロックをコンパイルするため、using ディレクティブなしでコードを記述し、型名を完全修飾してください。読み取りたい値を return すると、data.result.result に返されます。コードのコンパイルに失敗した場合は、以下でエラーを確認してください。

エラー原因修正方法
CS0210コンパイラーがリソース破棄ステートメントとして読み取る using ディレクティブディレクティブを削除し、型名を完全修飾してください
CS0246 / CS0103Rigidbody2D や PhysicsWorld など、完全修飾されていない型UnityEngine.Rigidbody2D や Unity.U2D.Physics.PhysicsWorld など、完全修飾名を使用してください
CS0104object と曖昧になる、修飾されていない ObjectUnityEngine.Object を使用してください

ステップ 0:物理システムの確認

Unity には 2 つの 2D 物理システムがあります。コードを共有しておらず、互いに作用することもありません。物理コードを書く前に、どちらを使うか特定してください。誤ったシステムを使うと、コードはコンパイルされて実行されますが、何も起こりません。

以下の順に、依頼内容、シーン、既存のスクリプトを表と照らし合わせて確認してください。

  1. まずシーンのコンポーネントと既存のスクリプトを確認してください。コンポーネントが信頼できる判断材料です。
  2. ユーザーの依頼の表現を確認してください。「コライダーを追加する」はコンポーネントに関する表現で、「千個生成する」はスクリプトに関する表現です。
  3. どのシステムがインストールされているかまだ不明な場合は、以下のプローブを実行してください。
  4. それでも判断できない場合は、作業を中断して質問してください。3 つすべての選択肢を提示し、ユーザーに代わって選択しないでください。
手掛かりシステム
Physics Pose、Area、Constraint、または Simulation コンポーネントCore コンポーネント。パッケージを使用する 6000.7 以降
Rigidbody 2D、Collider 2D、Joint 2D、Effector 2DLegacy
スクリプト内の Unity.U2D.Physics または UnityEngine.LowLevelPhysics2D 型スクリプト内の Core
Rigidbody2D、Collider2D、Physics2D 型Legacy
両方が存在するシミュレーションは別々です。その旨を伝え、個別に扱ってください
手掛かりなし作業を中断して、上記 3 つの選択肢を提示してください

用語:

  • Legacy = Rigidbody 2D および Collider 2D コンポーネント。
  • Core コンポーネント = Physics Pose および Physics Area。com.unity.2d.physics と Unity 6000.7 以降が必要です。
  • スクリプト内の Core = Unity.U2D.Physics API。パッケージは不要です。

プローブ:

unity command eval --code 'var r = ""; foreach (var n in new[] { "UnityEngine.Rigidbody2D", "Unity.U2D.Physics.PhysicsWorld", "UnityEngine.LowLevelPhysics2D.PhysicsWorld", "Unity.U2D.Physics.PhysicsPose" }) { var f = false; foreach (var a in System.AppDomain.CurrentDomain.GetAssemblies()) if (a.GetType(n) != null) f = true; r += f + ","; } return r;'

プローブの戻り値:Legacy の有無、Unity.U2D.Physics としての Core、UnityEngine.LowLevelPhysics2D としての Core、Core コンポーネントの有無。いずれかの Core 値が true の場合、Core が存在します。true の値から名前空間がわかります。false の場合、そのルートは対象外です。

トピックマップ全体

ワークフローや診断に進む前に、次のことを行ってください。

  1. 実行または修正しようとしている内容に関連する具体的な項目を扱うドキュメントページを開いて読み、見落としがないか確認してください。
  2. 読んだファイル名を回答に記載してください。

Unity に関する学習データは古くなっていたり、誤っていたり、使用している Unity のバージョンに合っていなかったりする可能性があるためです。

WebSearch よりも WebFetch を優先してください。より高速で、参照先に直接アクセスできます。必要なものだけを取得してください。取得する前に、<VERSION> を次のように置き換えてください。

  • docs.unity3d.com のパッケージ:パッケージのバージョン。例:@6.6 または @2.0。不明な場合はパッケージのバージョンを確認してください。
  • docs.unity.com:製品のバージョン。例:7000.0

docs.unity.com のエンジンページでは、6000.7 のように Unity のバージョンを使用してください。ページは Markdown 形式で、URL は .md で終わります。manifest.json にはバージョンの範囲や Git URL が含まれている場合があり、解決済みのバージョンとは限らないため、パッケージのバージョンは Packages/packages-lock.json で確認してください。

Editor のインストールフォルダーに Data/Documentation フォルダー(例:...Unity/Hub/Editor/6000.6.0b2/Editor/Data/Documentation)がある場合は、en/Manual フォルダー内の HTML ファイルを読んでください。それ以外の場合は、以下の参照先に記載されたオンラインの .md ページを使用してください。

進め方が分かったら、作業に取りかかる前に該当する参照資料を読んでください。

API リファレンス

Core API とレガシー API(Unity.U2D.Physics または UnityEngine.LowLevelPhysics2D、および UnityEngine.Rigidbody2D、Collider2D、Physics2D)は Unity Engine の一部です。Unity のバージョンごとにバージョン管理されているため、特定のクラスやメソッドを使用する前に、プロジェクトの Unity バージョンを確認してください。

  1. unity-cli スキルを使用して、プロジェクトの Unity バージョンを確認します。
  2. Editor のインストールフォルダーに Data/Documentation フォルダーがある場合は、その中の en/ScriptReference フォルダーにある html ファイルを grep し、残りの手順はスキップします。
  3. それ以外の場合は、https://docs.unity3d.com/<VERSION>/Documentation/ScriptReference/xrefmap.yml を取得してキャッシュします(<VERSION> はプロジェクトの Unity バージョンの major.minor 形式に置き換えます)。このファイルには、すべての公開 API メンバーの完全修飾名が uid として記載されています(例:uid: 'UnityEngine.Rigidbody2D.AddForce(UnityEngine.Vector2,UnityEngine.ForceMode2D)')。
  4. 参照のたびに再取得するのではなく、ローカルの yml ファイルを grep してクラスやメソッドを検索します。このファイルは大きく(約 6 MB)、全体を読み込まないでください。
  5. uid を Markdown ページに変換します。角括弧内のパラメーターを削除し、小文字に変換して、. を / に置き換え、最後に .md を追加します。その後、https://docs.unity.com/en-us/engine/<VERSION>/script-reference/<converted uid> を取得します。たとえば、UnityEngine.Rigidbody2D.AddForce(UnityEngine.Vector2,UnityEngine.ForceMode2D) は https://docs.unity.com/en-us/engine/<VERSION>/script-reference/unityengine/rigidbody2d/addforce.md になります。すべてのオーバーロードは同じページにあります。
    • コンストラクターには ctor を使用し(例:unityengine/vector2/ctor.md)、インデクサーには item を使用します(例:unityengine/vector2/item.md)。
    • 演算子の場合は、クラスのページを取得し(例:unityengine/vector2.md)、そのリンクをたどります。
    • ページ内のリンクは /engine/ で始まります。その前に https://docs.unity.com/en-us を追加します。
    • その Unity バージョンに該当するページが存在しない場合は、代わりに xrefmap.yml のエントリーにある href を使用します(例:href: 'Rigidbody2D.AddForce.html' => https://docs.unity3d.com/<VERSION>/Documentation/ScriptReference/Rigidbody2D.AddForce.html)。

Core のコンポーネント(Physics Pose、Area、Constraint、Simulation)は、com.unity.2d.physics パッケージの Unity.U2D.Physics 名前空間にあります。Unity のバージョンではなく、パッケージのバージョンごとにバージョン管理されているため、特定のクラスやメソッドを使用する前に、インストール済みのパッケージのバージョンを確認してください。

  1. unity-cli スキルを使用して、インストール済みのパッケージのバージョンを確認します。
  2. https://docs.unity3d.com/Packages/com.unity.2d.physics@<version>/xrefmap.yml を取得してキャッシュします(<version> はインストール済みのパッケージのバージョンの major.minor 形式に置き換えます)。このファイルは、すべての公開 API メンバーの完全修飾名を、ドキュメントページの href に対応付けます(例:href: api/Unity.U2D.Physics.PhysicsPose.html => https://docs.unity3d.com/Packages/com.unity.2d.physics@<version>/api/Unity.U2D.Physics.PhysicsPose.html)。
  3. 参照のたびに再取得するのではなく、ローカルの yml ファイルを grep してクラスやメソッドを検索します。ファイル全体を読み込まないでください。

API はバージョン間で非推奨とされることが多く、記憶しているメンバーがプロジェクトのバージョンでは非推奨または削除されている可能性があるため、トレーニング時の知識に頼らず、必ずプロジェクトの Unity バージョンとインストール済みのパッケージのバージョンに対応するドキュメントを使用してください。

実例

次の順に優先してください:使用する型またはメンバーのページにある C# の例、既存のプロジェクトスクリプト(そのスタイルに合わせます)、サンプルプロジェクト https://github.com/Unity-Technologies/PhysicsExamples2D。パターンを独自に考案する前に、3 つすべてを確認してください。

最終ステップ

物理の変更は実行時の動作に影響するため、コンパイルが正常に完了するだけでは不十分です。次のチェックを順番に実行してください。いずれかのチェックに失敗した場合は、見落としがないか ドキュメントのページ を読み直し、修正してからチェックを再実行してください。

  1. console_status を使って、プロジェクトにコンソールエラーがないことを確認します。
  2. 変更内容を読み返します。変更が正常にコンパイルされても、何も機能しないことがあるためです。
    • シーンに追加または設定したコンポーネントについては、eval を使って各コンポーネントが GameObject に存在し、プロパティに設定した値が反映されていることを確認します。たとえば、Collider 2D の isTrigger や、Core コンポーネントの型ページに記載されているメンバーを確認します。
    • スクリプトについては、読み返して、ステップ 0 で指定されたシステムと名前空間を使用していること、および各 Core ボディの type を明示的に設定していることを確認します。
  3. 変更した動作を出力する一時的な Debug.Log 行を追加します。たとえば、ボディの位置や速度、接触またはトリガーのコールバックが呼び出されたことなどを出力します。
  4. Play モードに入り、コンソールに想定したログ行が表示され、エラーが引き続きないことを確認します。eval を使ってワールドを読み取ることもできます。時間がかかりすぎるため、スクリーンショットは撮らないでください。
  5. Play モードを終了し、一時的な Debug.Log 行を削除して、コンソールにエラーがないことをもう一度確認します。

最終レポート

簡潔なチェックリストを作成します。変更した内容とその理由、使用した物理システム、ユーザーが決定または実行する必要があることを記載してください。

コメント