読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】当たり判定の有無や形状、物理演算の状態を視覚的に確認する Physics Debugger【5.6】

3D Unity5.6 Unity 物理演算

f:id:tsubaki_t1:20170105221344g:plain

物理演算を使用している際に、現在Rigidbodyがスリープしているか物理演算に使用するコライダーの形状等を確認したく鳴る事があります。

Unity 5.6で、そういったケースで便利なPhysics Debuggerが追加されたので、少し紹介します。

Physics Debugger

Physics DebuggerはRigidbodyの状態やColliderの形状をシーンビューにオーバーレイ表示する機能です。

対象のオブジェクトが動いているのか、どういったステータスを持っているのか等を一発で確認出来るようになっています。例えば、緑がRigidbody紫がIsKinematicで動作するRigidbody赤はstaticなコライダーです。
下の図では、3つのRigidbodyで稼働するオブジェクトと、IsKinematicで稼働するプレイヤーの存在が確認出来ます。
また、よく見ると後方の壁や山積みの樽にはColliderを付け忘れている事が確認出来ます。

f:id:tsubaki_t1:20170105222637j:plain

またコライダーの形状が確認出来るので、Triggerのような実際の画像と必ずしも判定が一致しない当たり判定の、実際の形状や範囲を確認するのにも便利です。
例えば下の図では、プレイヤーの足元にある「即死トラップ」の範囲を確認しています。

今まではオブジェクトを選択してColliderのGizmoを表示したり、判定確認用にレンダラーを登録したりエディタ拡張で表示する必要がありました。

f:id:tsubaki_t1:20170105223150j:plain

実際に使ってみる

Window > Physics DebuggerでPhysics Debuggerでウィンドウが開きます。

後はシーンビューに表示されるCollision Geometryにチェックを入れると、Physics Debuggerが条件にあったコライダーをオーバーレイ表示します。

f:id:tsubaki_t1:20170105222034j:plain

f:id:tsubaki_t1:20170105223832j:plain

スリープしないRigidbodyを探したい

Rigidbodyは基本的に、可能な限りRigidbodyをスリープ(動かなくなったオブジェクトは処理をスキップする機能)をさせる事がパフォーマンス的に非常に重要です。

ただ、状況次第でRigidbodyが中々スリープしない事があります(めり込んでたりとか)ので、そういった物を探して何とかします。対策は例えばDragを付けるとか、コライダーの形状をもっとスリープしやすいものにするとか。

Hide Selected Itemを選択して、Hide Rigidbodyのチェックは外しますがHide Sleeping Bodiesにチェックを入れます。
これで、動いてるRigidbodyにだけ色が付きます。

f:id:tsubaki_t1:20170105231518g:plain

コライダーやRigidbodyのつけ忘れを確認したい

Show Selected Itemを選択して、Select Allを押します。

これで全部のコライダーの形状や状態が確認出来ますので、コライダーやRigidbodyの付いていないメッシュを探します。

f:id:tsubaki_t1:20170105224226j:plain

よく見ると右上の樽に相変わらずコライダーが付いてません。このままゲームをプレイすると、右上の樽の中にプレイヤーが入り込めてしまいます。

f:id:tsubaki_t1:20170105224720j:plain

MeshColliderかつConvexにチェックが入ってない物を探す

MeshColliderはパフォーマンス的に問題になりやすいコライダーですが、特にConvexにチェックが入っていないものは負荷が高いです。
また、concaveのMeshCollider同士では接触判定を出せないので、これを見逃すと地面や壁が貫通する事も有ります。

Show Selected Itemを選択し、Collision Typeの中のMeshCollider(Cncave)だけチェックを入れると、MeshColliderかつConvexにチェックの入っていないコライダーを確認出来ます。

f:id:tsubaki_t1:20170105225142j:plain

まぁ、これを探すなら「シーン内検索して指定のプロパティ持ってる物を一覧表示」のような物の方が良いかもだけど。

関連

blogs.unity3d.com

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp