# ギズモとハンドル

> Use gizmos to interact with the Scene view in the Editor.

Gizmos クラスおよび Handles クラスによって、シーンビューやゲームビューに線、形状、インタラクティブなハンドルやコントロールを描くことができます。この 2 つのクラスを組み合わせることで、これらのビューに表示される内容を拡張でき、プロジェクトを自由に編集できるインタラクティブなツールのビルドも可能です。例えば、Inspector に数字を入力するのではなく、ゲーム内のノンプレイヤーキャラクターの周りにドラッグ可能な円の半径のギズモを作成し、プレイヤーの声が聞こえ、姿が見える範囲を示すことができます。

このページでは、Gizmos クラスと Handles クラスについて、概要を簡単に説明します。Gizmos クラスと Handles クラスのすべてのメンバーをカバーするドキュメントとリファレンスは、[ギズモ](/engine/6000.0/script-reference/unity-engine/gizmos.md)と[ハンドル](/engine/6000.0/script-reference/unity-editor/handles.md)のスクリプトリファレンスページを参照してください。

## Gizmo

Gizmos クラスは、線、球、立方体、アイコン、テクスチャ、メッシュなどをシーンビューに描き、プロジェクトの開発中にデバッグ、設定の補助、ツールとして使用することができます。

例えば、ゲームオブジェクトの周りに 10 ユニットの黄色い線による立方体を描くには、次のようなコードを使います。

```
using UnityEngine;
public class GizmosExample : MonoBehaviour
{
    void OnDrawGizmosSelected()
    {
        // Draw a yellow cube at the transform position
        Gizmos.color = Color.yellow;
        Gizmos.DrawWireCube(transform.position, new Vector3(10, 10, 10));
    }
}
```

このキューブをディレクショナルライトのゲームオブジェクトに配置すると、下の図のようになります。


**キューブギズモを描画する追加スクリプトが適用されたライトのゲームオブジェクト:**
![](/api/media?file=/engine/6000.0/media/images/ScriptingGizmoExample.png)

ギズモの使い方についての詳細なドキュメントは、[ギズモスクリプトのリファレンスページ](/engine/6000.0/script-reference/unity-engine/gizmos.md)を参照してください。

## Handles

ハンドルはギズモと似ていますが、相互作用性や操作性の面でより多くの機能を提供します。Unity 自体による 3D コントロールは、シーンビュー内のアイテムを操作するための機能で、ギズモとハンドルを組み合わせたものです。多くのビルトインのハンドル GUI があり、例えば Transform コンポーネントを使ってオブジェクトの位置を決めたり、スケールしたり、回転させたりする、よく知られたツールもこの 1 つです。しかし、独自のハンドル GUI を定義して、カスタムコンポーネントエディターで使用することもできます。このような GUI は、連続的に生成されたシーンコンテンツ、"見えない" アイテム、そしてウェイポイントやロケーションマーカーのような関連オブジェクト群の編集に非常に便利です。

例えば、以下のように矢印ハンドルで円弧の領域を作成すると、シーンビューの "覆われた領域" を修正することができます。

```
using UnityEditor;
using UnityEngine;
using System.Collections;

//this class should exist somewhere in your project
public class WireArcExample : MonoBehaviour
{
    public float shieldArea;
}

// Create a 180 degrees wire arc with a ScaleValueHandle attached to the disc
// that lets you modify the "shieldArea" value in the WireArcExample
[CustomEditor(typeof(WireArcExample))]
public class DrawWireArc : Editor
{
    void OnSceneGUI()
    {
        Handles.color = Color.red;
        WireArcExample myObj = (WireArcExample)target;
        Handles.DrawWireArc(myObj.transform.position, myObj.transform.up, -myObj.transform.right, 180, myObj.shieldArea);
        myObj.shieldArea = (float)Handles.ScaleValueHandle(myObj.shieldArea, myObj.transform.position + myObj.transform.forward * myObj.shieldArea, myObj.transform.rotation, 1, Handles.ConeHandleCap, 1);
    }
}
```


**アークハンドルとスケールハンドルの例:**
![](/api/media?file=/engine/6000.0/media/images/ScriptingHandlesExample.png)

ハンドルの使用方法についての詳細なドキュメントは、[ハンドルのスクリプトリファレンスページ](/engine/6000.0/script-reference/unity-editor/handles.md)を参照してください。
