mcpField
G
game-physics

game-physics

github.com/alphaonedev開発62 回インストール
リポジトリ

game-physics について

game-physics はゲーム開発向けの物理シミュレーションスキルで、2D・3D シーンの衝突検出、剛体力学、力の適用に対応します。OpenClaw のコマンドラインまたは API から呼び出せ、シミュレーション制御やシーンの最適化も行えます。

主な機能

  1. 01AABB、OBB、球体の衝突検出
  2. 02剛体力学のシミュレーション
  3. 03重力、インパルス、摩擦の処理
  4. 04一時停止、ステップ、リセット、時間倍率
  5. 05空間分割による計算の最適化

活用シーン

  1. 01弾むボールなどの動きのシミュレーション
  2. 02プラットフォーマーでのプレイヤーと壁の衝突検出
  3. 03大規模シーンでの物理計算量の削減

インストール

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

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill game-physics

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

詳細

game-physics

目的

このスキルはゲーム向けの物理シミュレーションを扱い、衝突検出、剛体力学、力の適用といった中核的な仕組みに重点を置いています。ゲームエンジンと連携して現実的な相互作用をシミュレートし、2D/3D 環境で正確な物理挙動を実現します。

使用するタイミング

プラットフォーマー、シミュレーション、マルチプレイヤーのワールドなど、物理演算が必要なゲームを開発するときにこのスキルを使用します。オブジェクトの相互作用(例:ボールの跳ね返り、キャラクターの移動)、パフォーマンスが重要なシミュレーション、Unity や Godot などの既存のゲームエンジンの拡張を伴う場面に適用してください。ゲーム以外のアプリケーションや単純なアニメーションには使用しないでください。

主な機能

  • 衝突検出:AABB、OBB、球ベースの判定に対応し、正確な交差判定には SAT などのアルゴリズムを使用します。
  • 剛体力学:速度、加速度、トルクをシミュレートし、力の適用にはニュートンの運動法則を組み込みます。
  • 力の処理:力積、重力、摩擦を適用します。ベクトル入力(例:[x, y, z] の力)で設定できます。
  • シミュレーション制御:シミュレーションの一時停止、ステップ実行、リセットができます。スローモーション効果のための時間スケーリングにも対応します。
  • 最適化:空間分割(例:四分木)を使用して、大規模なシーンでの計算量を削減します。

使用パターン

モジュール式に統合するには、OpenClaw の CLI または API を通じてこのスキルを呼び出します。まずシーン設定を読み込み、その後ループ内でシミュレーションを実行します。CLI ではファイルから入力をパイプし、API では JSON ペイロードを使用します。環境内で $OPENCLAW_API_KEY を設定し、必ず認証を構成してください。使用パターンの例:設定の読み込み → シミュレーションの初期化 → 更新ループ → 結果の出力。

主なコマンド/API

操作には、次の CLI コマンドまたは API エンドポイントを使用します。すべてのコマンドで $OPENCLAW_API_KEY による認証が必要です。

  • CLI コマンド:openclaw game-physics simulate --file scene.json --steps 100 --gravity 9.8

    • フラグ:JSON 設定用の --file(例:{"objects": [{"mass": 1.0, "position": [0,0,0]}]})、シミュレーションの反復回数用の --steps、ベクトル [x,y,z] 用の --gravity。
    • 例:export OPENCLAW_API_KEY=your_key; openclaw game-physics simulate --file input.json を実行します。
  • API エンドポイント:POST /api/game-physics/simulate

    • ペイロード:{"scene": {"objects": [{"id": "ball", "mass": 2.0, "velocity": [1,0,0]}]}, "steps": 50} のような JSON
    • ヘッダー:Authorization: Bearer $OPENCLAW_API_KEY を含めます。
    • レスポンス:結果を含む JSON。例:{"positions": [{"id": "ball", "newPosition": [5,0,0]}]}
  • コードスニペット(Python CLI ラッパー):

    import os
    import subprocess
    api_key = os.environ.get('OPENCLAW_API_KEY')
    subprocess.run(['openclaw', 'game-physics', 'simulate', '--file', 'scene.json', '--steps', '10'])
    
  • コードスニペット(requests を使った API 呼び出し):

    import requests
    headers = {'Authorization': f'Bearer {os.environ.get("OPENCLAW_API_KEY")}'}
    data = {'scene': {'objects': [{'mass': 1.0, 'position': [0,0,0]}]}, 'steps': 20}
    response = requests.post('https://api.openclaw.ai/api/game-physics/simulate', json=data, headers=headers)
    

設定形式:シーンには JSON を使用します。例:{"objects": [{"id": "obj1", "shape": "sphere", "radius": 1.0, "mass": 5.0, "position": [0,0,0]}]}。スキーマで検証してください。objects には "id"、"shape"、物理プロパティが必要です。

統合に関する注意

ゲームループ内でこのスキルをラップして統合します。ユーザー入力後、または一定間隔で simulate を呼び出してください。ゲームエンジンでは、レンダリング用に結果をベクトルとしてエクスポートします。カスタムコールバックにはフックを使用します。たとえば、CLI で --callback-url を指定します。他の OpenClaw スキルと併用する場合は、出力を連結します(例:シミュレーション結果をレンダリングスキルに渡します)。データ形式を一致させて互換性を確保してください。物理演算の出力は標準配列 [x,y,z] です。非同期処理には、Webhook を使った API を使用します。

エラー処理

よくあるエラーには、無効な設定(例:"mass" フィールドの欠落)、認証エラー、シミュレーションのオーバーフローがあります。次のように処理します。

  • コマンドの前に $OPENCLAW_API_KEY を確認し、設定されていない場合はエラーにします。
  • jsonschema などのライブラリを使って JSON スキーマを検証します。例:レスポンスのステータスが 400 の場合、"Missing field: mass" のようなエラーメッセージを解析します。
  • コードスニペット(Python でのエラー処理):
    try:
        result = subprocess.run(['openclaw', 'game-physics', 'simulate', '--file', 'invalid.json'], check=True)
    except subprocess.CalledProcessError as e:
        print(f"Error: {e.returncode} - {e.stderr.decode()}")
    
  • API の場合:HTTP エラー(例:認証に関する 401)を捕捉し、指数バックオフで再試行します。CLI では --debug フラグを使って詳細なエラーを記録します。

具体的な使用例

  1. 跳ねるボールをシミュレートする: シンプルな物理デモに使用します。コマンド:openclaw game-physics simulate --file ball.json --steps 50 --gravity [0,-9.8,0]。コードでは、{"objects": [{"id": "ball", "shape": "sphere", "position": [0,10,0], "velocity": [5,0,0], "bounciness": 0.8}]} を使って "ball.json" を読み込み、その後、各フレームでゲーム内の位置を更新するために適用します。

  2. ゲームレベルでの衝突検出: プラットフォーマーで衝突を検出します。API 呼び出し:POST /api/game-physics/simulate に {"scene": {"objects": [{"id": "player", "position": [1,2,0]}, {"id": "wall", "shape": "box", "position": [0,0,0]}]}, "steps": 1} を送信します。レスポンスを処理して衝突を確認し、それに応じてプレイヤーの移動を調整します。

グラフの関係

  • 関連クラスター:game-dev(例:レンダリングや AI のスキルとデータを共有します)。
  • 関連スキル:rendering(可視化用の位置を出力します)、pathfinding(動的な環境で物理を使用します)。
  • 依存関係:認証には OpenClaw のコアサービスが必要です。ゲーム以外のクラスターへの直接的なエッジはありません。

コメント