物理演算を使用している際に、現在Rigidbodyがスリープしているかや物理演算に使用するコライダーの形状等を確認したく鳴る事があります。
Unity 5.6で、そういったケースで便利なPhysics Debuggerが追加されたので、少し紹介します。
Physics Debugger
Physics DebuggerはRigidbodyの状態やColliderの形状をシーンビューにオーバーレイ表示する機能です。
対象のオブジェクトが動いているのか、どういったステータスを持っているのか等を一発で確認出来るようになっています。例えば、緑がRigidbody、紫がIsKinematicで動作するRigidbody、赤はstaticなコライダーです。
下の図では、3つのRigidbodyで稼働するオブジェクトと、IsKinematicで稼働するプレイヤーの存在が確認出来ます。
また、よく見ると後方の壁や山積みの樽にはColliderを付け忘れている事が確認出来ます。
またコライダーの形状が確認出来るので、Triggerのような実際の画像と必ずしも判定が一致しない当たり判定の、実際の形状や範囲を確認するのにも便利です。
例えば下の図では、プレイヤーの足元にある「即死トラップ」の範囲を確認しています。
今まではオブジェクトを選択してColliderのGizmoを表示したり、判定確認用にレンダラーを登録したりエディタ拡張で表示する必要がありました。
実際に使ってみる
Window > Physics DebuggerでPhysics Debuggerでウィンドウが開きます。
後はシーンビューに表示されるCollision Geometryにチェックを入れると、Physics Debuggerが条件にあったコライダーをオーバーレイ表示します。
スリープしないRigidbodyを探したい
Rigidbodyは基本的に、可能な限りRigidbodyをスリープ(動かなくなったオブジェクトは処理をスキップする機能)をさせる事がパフォーマンス的に非常に重要です。
ただ、状況次第でRigidbodyが中々スリープしない事があります(めり込んでたりとか)ので、そういった物を探して何とかします。対策は例えばDragを付けるとか、コライダーの形状をもっとスリープしやすいものにするとか。
Hide Selected Itemを選択して、Hide Rigidbodyのチェックは外しますがHide Sleeping Bodiesにチェックを入れます。
これで、動いてるRigidbodyにだけ色が付きます。
コライダーやRigidbodyのつけ忘れを確認したい
Show Selected Itemを選択して、Select Allを押します。
これで全部のコライダーの形状や状態が確認出来ますので、コライダーやRigidbodyの付いていないメッシュを探します。
よく見ると右上の樽に相変わらずコライダーが付いてません。このままゲームをプレイすると、右上の樽の中にプレイヤーが入り込めてしまいます。
MeshColliderかつConvexにチェックが入ってない物を探す
MeshColliderはパフォーマンス的に問題になりやすいコライダーですが、特にConvexにチェックが入っていないものは負荷が高いです。
また、concaveのMeshCollider同士では接触判定を出せないので、これを見逃すと地面や壁が貫通する事も有ります。
Show Selected Itemを選択し、Collision Typeの中のMeshCollider(Cncave)だけチェックを入れると、MeshColliderかつConvexにチェックの入っていないコライダーを確認出来ます。
まぁ、これを探すなら「シーン内検索して指定のプロパティ持ってる物を一覧表示」のような物の方が良いかもだけど。
「シーンの中にあるintensityが1のLight」を一覧で表示し pic.twitter.com/qPmp9nOwt3
— 椿 (@tsubaki_t1) 2015年12月21日
シーン内のプロパティを「オブジェクト名」「コンポーネント名」「プロパティ・フィールド名」「フィールドの持つ値」で検索して一覧化するやつ、HDDクラッシュに巻き込まれて消えたと思ったらバックアップがあった pic.twitter.com/UJknUGHYAk
— 椿 (@tsubaki_t1) 2015年12月21日