【Unity】開発中の状態をビジュアル的に確認したい

「Gizmos」とは、Unityエディタ内で使用されるビジュアルツールです。これはゲームの実行中ではなく、開発中にシーン内のオブジェクトの位置やスケール、方向などを視覚的に示すために使われます。Gizmoはデバッグやオブジェクト管理を容易にするためのもので、プログラマーやゲームデザイナーがシーンレイアウトを効率的に編集できるように支援します。

どのようなもの

例えば、ライトやカメラなどの特定のオブジェクトに対しては、その機能に応じた特定のGizmoが表示されます。ライトオブジェクトには光の方向を示す線が、カメラオブジェクトには視野範囲を示す枠が表示されることがあります。これにより、これらのオブジェクトの設定を直感的に理解しやすくなります。

GizmoはUnityエディタの「Gizmos」メニューからカスタマイズが可能で、特定のGizmoの表示/非表示を切り替えることができ、シーンの見た目をクリアに保つことができます。

独自のGizmo(スクリプトでのアクセス)

スクリプトを使用してGizmosを描画することができます。スクリプトからGizmosにアクセスする主な方法は、OnDrawGizmos または OnDrawGizmosSelected メソッドを使うことです。これらのメソッドをコンポーネントスクリプト内に実装することで、カスタムGizmoを描画できます。

OnDrawGizmos

このメソッドは、オブジェクトが選択されていなくても、エディタのシーンビューで常にGizmoを描画します。これは、オブジェクトの位置や状態を常時視覚的に把握したい場合に便利です。

OnDrawGizmosSelected

このメソッドは、オブジェクトが選択されているときのみGizmoを描画します。これは、特定のオブジェクトに焦点を当てたいときや、選択時のみに情報を表示したい場合に適しています。

例: 簡単なGizmoの描画

以下のスクリプト例は、オブジェクトの位置に球の枠線を描画する方法を示しています。

using UnityEngine;

public class ExampleGizmos : MonoBehaviour
{
    void OnDrawGizmos()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, 1.0f);  // 位置に1ユニットの半径の球を描画
    }
}

このコードを任意のオブジェクトにアタッチすると、そのオブジェクトの位置に赤い球が描画されます。これにより、オブジェクトの位置を簡単に確認することができます。

Gizmosはデバッグやオブジェクトの位置確認など、開発中に視覚的な手助けを提供する非常に便利なツールです。

様々なGizmo

UnityのGizmosを使ってさまざまな形状や線を描画するためのメソッドは多数存在します。ここでは、DrawSphere 以外によく使われるいくつかのメソッドを紹介します。

1. DrawSphere

指定された位置と半径で立体の球を描画します。シーン内でオブジェクトの影響範囲や中心点を示すのに適しています。

Gizmos.DrawSphere(Vector3 center, float radius);

2. DrawCube

指定された位置とサイズでワイヤーフレームの立方体を描画します。

Gizmos.DrawCube(Vector3 center, Vector3 size);

3. DrawWireCube

指定された位置とサイズで立方体の枠線を描画します。

Gizmos.DrawWireCube(Vector3 center, Vector3 size);

4. DrawRay

指定された起点から特定の方向に光線(線)を描画します。

Gizmos.DrawRay(Vector3 from, Vector3 direction);

5. DrawLine

二つの点を結ぶ直線を描画します。

Gizmos.DrawLine(Vector3 from, Vector3 to);

6. DrawIcon

シーンビューにアイコンを描画します。主にオブジェクトを視覚的に識別するために使用されます。

Gizmos.DrawIcon(Vector3 center, string name, bool allowScaling = true);

7. DrawWireSphere

指定された位置と半径で球の枠線を描画します。

Gizmos.DrawWireSphere(Vector3 center, float radius);

8. DrawMesh

メッシュを指定された位置、回転、スケールで描画します。これは複雑な形状をGizmosとして描画する場合に便利です。

Gizmos.DrawMesh(Mesh mesh, int submeshIndex, Vector3 position, Quaternion rotation, Vector3 scale);

9. DrawWireMesh

メッシュのワイヤーフレームを指定された位置、回転、スケールで描画します。

Gizmos.DrawWireMesh(Mesh mesh, int submeshIndex, Vector3 position, Quaternion rotation, Vector3 scale);

これらのメソッドを使用することで、Unityエディタのシーンビューにおいてオブジェクトの位置、方向、範囲などを視覚的に表現し、デバッグやレイアウトの確認が容易になります。

C#,Unity

Posted by hidepon