Gizmoとは?

UnityにはGizmoという機能があります。

これはSceneView上で視覚的なデバッグ情報を描画するのに役立つ機能です。

MonoBehaviourを継承しているコンポーネントで、Gizmosクラスを使うことで、

独自のギズモを実装し、ラインを引いたりワイヤーフレームを描画したりできます。

Unityのカメラや光源がSceneView上でアイコンとして表示されているのも、Gizmoによって描画されています。

Gizmoを実装する

例えば、以下のように記述します。

MonoBehaviourを継承したコンポーネントクラスに、

OnDrawGizmosメソッドを追加することで、SceneView上での描画時に呼ばれるようになります。

通常時

private void OnDrawGizmos()
{
    // ギズモの色を設定
    Gizmos.color = Color.red;

    // ワイヤーフレームの球を描画
    Gizmos.DrawWireSphere(transform.position, 1f);
}

この場合SceneView上で赤いワーヤーフレームの球が表示されることになります。

選択時

OnDrawGizmosSelectedメソッドを追加すると、オブジェクトが選択されている時のみ描画されるギズモを定義できます。

private void OnDrawGizmosSelected()
{
    // ギズモの色を設定
    Gizmos.color = Color.blue;

    // ワイヤーフレームのキューブを描画
    Gizmos.DrawWireCube(transform.position, 1f * Vector3.one);
}

この場合は選択されている方のオブジェクトに、青いワイヤーフレームのキューブが表示されるようになります。

Gizmo用メソッド

Gizmosクラスにはいくつかの形状を描画するためのメソッドが用意されています。

内容メソッド
始点と方向から線を描画Gizmos.DrawRay(Vector3 from, Vector3 direction)
ワイヤーフレームの球を描画Gizmos.DrawWireSphere(Vector3 center, float radius)
塗りつぶしの球を描画Gizmos.DrawSphere(Vector3 center, float radius)
ワイヤーフレームの立方体を描画Gizmos.DrawWireCube(Vector3 center, Vector3 size)
塗りつぶしの立方体を描画Gizmos.DrawCube(Vector3 center, Vector3 size)
視錐台(カメラの視野)を描画Gizmos.DrawFrustum(Vector3 center, float fov, float maxRange, float minRange, float aspect)
任意のメッシュを描画Gizmos.DrawMesh(Mesh mesh, Vector3 position, Quaternion rotation, Vector3 scale)

Gizmoを非表示にする

標準で用意されているギズモや自作したギズモを非表示にしたい場合もあると思います。

その際にはSceneViewのツールバー上にギズモ用のメニューがあるので、

一括で非表示にしたり一部だけ費表示することも出来ます。

まとめ

今回はGizmoについて簡単に紹介しました。

これらを組み合わせることで、ゲーム開発を視覚的にサポートする機能を提供できます。

例えば:

  • 敵の索敵範囲をSceneView上に表示する
  • 敵がどの対象へ向かっているのかを線で示す
  • 向いている方向にGizmos.DrawRayで線を引く
  • 進入時にイベントが発生するエリアをGizmos.DrawCubeで表示する

開発が進むにつれて、画面上の表示物が増え、スクリプトだけでは現在の状態を把握しづらくなる場面もあるかもしれません。

そんなときにGizmoを活用して、視覚的に状態を確認できるようにしておくと、不具合の発見やバランス調整にも役立ちます。

機会があれば、ぜひ活用してみてください。