Unity を検索

物理衝突ジオメトリ用のデバッグビューモード

2016年6月9日 カテゴリ: テクノロジー | 3 分 で読めます
image2016-4-27 16-16-8
image2016-4-27 16-16-8
取り上げているトピック
シェア

今日は、衝突が起こるか起きないか判断するために手早くシーン内の衝突ジオメトリを確認したい時に役立つものをご紹介します。これは、RenderメッシュとColliderメッシュの同期が外れた際によく問題になることです。この状況を改善するために、物理衝突ジオメトリ用のデバッグビューモードを開発中です。これによってCollision Layerを素早く調べ、問題を見つけることができます。

  • 5.4に更新: 5.4 beta 23ベースの新しいエディターのビルドが入手できるようになりました。これは最新のベータ版なので、プロジェクトを開く前にバックアップすることを忘れないようにしてください。

また、このツールによって、衝突ジオメトリを持つGameObjectを詳細な確認・修正のために素早く選択することも可能になります。物理パフォーマンスの問題をデバッグするときにシミュレーション中のRigidbodyをハイライトすることもできます。

是非このエディタービルドをお試しになり、シーン内を見渡してみて、便利だと感じられた部分や改善が必要な部分についてご意見をお聞かせください。このビルドはUnity 5.3.4p4をベースに開発されていますので、ほとんどの皆さんのケースで安定して動くはずです。公式なリリース時期は未定ですが、準備が整えば、旧バージョンのUnityへの移植も行える可能性は高いです。

image2016-4-27 16-16-8
インスペクター
image2016-4-27 16-16-0
シーンビューへのオーバーレイ

このビューモードは、PhysX Visual Debugger (PVD)の軽量版にGameObjectやAssetをUnity上で直接選択できる機能が追加されたものと考えることもできます。簡単に使えるようにすることがこのビューモードを作った最大の目的です。PVDはUnityとは使い勝手の違う独立したアプリケーションなので、扱いが難しい場合があります。一部のバージョンのPVDでは大きなTerrainにおいて、操作が遅くなるというパフォーマンスの問題もありました。

今後も、以下のような機能追加を考えています。

  • 個々のColliderコンポーネントの選択
  • Layerごとにユーザーが色を定義できる
  • 接点の表示
  • レイキャスト、オーバーラップテスト、スイープの表示
  • カーソルをColliderの上に置いた時に、より多くの情報(Layerなど)を表示する
  • Mayaのような視点を光源としたシェーディングによって、曲面をわかりやすくする
  • タイムラインの記録と移動
  • ネットワーク対応
  • より多くのレンダリングの制御をスクリプトから可能にする
  • 選択されたRigidbodyが衝突しているColliderの表示
  • 選択されたコライダーが送受信するTrigger/Collideメッセージの表示

C# API:

  • 下記のAPIはエディタ上でのみ使用でき、プレイヤー上では使用できません。
  • クラス名は"PhysicsVisualizationSettings"から "Physics.DebugVisualization"に変更予定です。
public class PhysicsVisualizationSettings
{
  public static void Reset ();

  // properties
  public static bool showCollisionGeometry;
  public static bool enableMouseSelect;
  public static bool useSceneCam;
  public static float viewDistance;
  public static int terrainTilesMax;
  public static bool forceOverdraw;
  public static bool showStaticColliders;
  public static bool showTriggers;
  public static bool showRigidbodies;
  public static Color staticColor;
  public static Color rigidbodyColor;
  public static Color kinematicColor;
  public static float baseAlpha; // (1 - transparency)
  public static bool devOptions;
  public static int dirtyCount;

  public static bool GetShowCollisionLayer (int layer);
  public static void SetShowCollisionLayer (int layer, bool show);

  public static void UpdateMouseHighlight (Vector2 pos);
  public static void ClearMouseHighlight ();
  public static bool HasMouseHighlight ();
}

制限事項

  • Cloth、Joint、WheelColliderには未対応です。
  • TerrainCollider で Enable の切り替えを何度も行うと、ランダムに選ばれたレイキャストの失敗が発生します。
  • 複数のシーンビューを使用している場合、効果的に選択を行えるのは最後のシーンビューのみになります。
  • Tree Colliderは、地形上にカーソルがあっても一本一本のツリーをハイライトしません。
  • 矩形選択は未対応です。
2016年6月9日 カテゴリ: テクノロジー | 3 分 で読めます
取り上げているトピック