UnityのGizmosを使うとシーンビューにアイコンやテクスチャ、メッシュ等を表示する事が出来るようになります。
デフォルトでもシーンビューを見るとカメラやライトの表示がされていますよね?
Gizmosを使うとそれを自分で作成する事が出来ます。
通常はシーンビューのみGizmosが有効になっていますが、ゲームビューでもGizmosボタンを押せば有効になります。
↑のボタンを押すとゲームビューでもGizmosが表示されます。
Gizmosを表示する
シーンビューにGizmosを表示するにはGizmosクラスを使用します。
Gizmosクラスのメソッドを使うとアイコンやテクスチャ、メッシュ等を描画する事が出来るようになります。
Gizmosクラスのメソッドを記述する場所
GizmosクラスのメソッドはMonoBehaviourクラスに定義されている専用のメソッド内に記述します。
OnDrawGismos
OnDrawGismosメソッドはスクリプトをゲームオブジェクトに設定している間呼ばれます。
通常であればこのメソッドを使用しGizmosクラスのメソッドを中に記述します。
1 2 3 4 5 6 7 8 9 10 11 | using UnityEngine; using System.Collections; using System; public class GizmosTest : MonoBehaviour { // スクリプトがゲームオブジェクトに設定されている時 void OnDrawGizmos() { } } |
OnDrawGizmosSelected
OnDrawGizmosSelectedメソッドはそのゲームオブジェクトがヒエラルキーで選択されている時だけ実行されます。
その為スクリプトが設定されているゲームオブジェクトの選択時だけGizmosを表示したい場合はこちらのメソッドを使用します。
1 2 3 4 5 6 7 8 9 10 11 | using UnityEngine; using System.Collections; using System; public class GizmosTest : MonoBehaviour { // スクリプトを設定したゲームオブジェクトが選択された時だけ void OnDrawGizmosSelected() { } } |
Gizmosの色を変更する
Gizmosの色を変更するにはGizmos.colorプロパティを変更します。
1 2 3 | Gizmos.color = new Color (1f, 0, 0, 0.3f); |
スクリプトで複数のGizmosを表示する時はGizmos表示前に色を変更しておくといいです。
四角柱を表示
四角柱(キューブ)を表示するにはDrawCubeを使います。
1 2 3 | Gizmos.DrawCube (transform.position, new Vector3 (1, 2, 1)); |
第1引数が表示する中心位置で第2引数が四角柱のサイズを指定します。
四角柱のワイヤーフレームを表示
四角柱をワイヤーフレームだけで表示する事が出来ます。
1 2 3 | Gizmos.DrawWireCube (transform.position + Vector3.left, new Vector3(1, 2, 1)); |
第1引数が表示する中心位置、第2引数がサイズです。
球を表示
球を表示するにはGizmos.DrawSphereを使用します。
1 2 3 4 | Gizmos.color = new Color(1f, 0, 0, 0.5f); Gizmos.DrawSphere (transform.position, 1f); |
↑の例では最初にGizmosの色を変更しています。
DrawSphereの第1引数は表示する中心位置、第2引数が球の半径になります。
球のワイヤーフレームを表示
球のワイヤーフレームはGizmos.DrawWireSphereを使用します。
1 2 3 | Gizmos.DrawWireSphere (transform.position + Vector3.right, 1f); |
カメラの錐台を表示
カメラの錐台を表示するにはGizmos.DrawFrustumを使用します。
1 2 3 4 | Gizmos.color = new Color (0, 1, 0, 1); Gizmos.DrawFrustum (Vector3.zero, 60f, 1000f, 0f, 1.6f); |
↑の例では最初にGizmosの色を緑色に変更しています。
DrawFrustumの第1引数は位置、第2引数はカメラの視野、第3引数が到達点、第4引数がカメラの位置までの距離、第5引数が幅に対する高さの比率になります。
説明だけだと解り辛いですね・・・・(^_^;)
テクスチャを表示
テクスチャを表示するにはGizmos.DrawGUITextureを使用します。
1 2 3 4 5 6 7 8 9 | public Texture texture; void OnDrawGizmos() { // テクスチャサイズを偶数で設定 Vector2 textureSize = new Vector2 (2f, 2f); Gizmos.DrawGUITexture (new Rect(-textureSize / 2f, textureSize), texture); } |
↑の例ではインスペクタでテクスチャを設定出来るようにし、OnDrawGizmosメソッド内でVector2のテクスチャサイズを宣言します。
後でRectのサイズを指定しますが、小数点の値を使うと上手く出来なかった為偶数値を設定するようにしました。
DrawGUITextureの第1引数ではRect型の値を設定します。
これはテクスチャを表示する位置とテクスチャのサイズを指定します。
ここで指定する位置はスクリーンの真ん中からの位置になるようなので、テクスチャのサイズの半分のサイズを移動し中央に表示するようにしています。
Rectの引数はX、Y座標、テクスチャの幅、高さを個別に指定する事も出来ます。
DrawGUITextureの第2引数は表示するテクスチャを指定します。
アイコンを表示する
アイコンを表示するにはGizmos.DrawIconを使用します。
アイコンに使用する画像はAssets/Gizmosフォルダに配置する必要があります。
1 2 3 | Gizmos.DrawIcon(new Vector3(3, 0, 0), "HeartIcon.png", false); |
DrawIconの第1引数が表示位置、第2引数がAssets/Gizmosフォルダに配置した画像ファイル名、第3引数は画面サイズを変えた時にアイコンを拡大・縮小するかどうかになります。
↑のようにアイコンに使用するファイルをAssets/Gizmosに置きます。
レイを表示
レイを表示するにはGizmos.DrawLineかGizmos.DrawRayを使用します。
1 2 3 4 5 6 | Gizmos.color = new Color(1f, 0, 1f, 1f); Gizmos.DrawLine (Vector3.right, Vector3.right + Vector3.forward * 50f); Gizmos.color = new Color (0.5f, 0, 0.5f, 1f); Gizmos.DrawRay (Vector3.zero, Vector3.forward * 50f); |
DrawLineは第1引数にレイの開始位置、第2引数にレイの終了位置を指定します。
DrawRayは第1引数にレイの開始位置、第2引数にはレイの方向ベクトルを指定します。
メッシュの表示
メッシュの表示をするにはGizmos.DrawMeshを使用します。
1 2 3 4 5 6 7 8 | public Mesh mesh; void OnDrawGizmos() { Gizmos.color = new Color(1f, 1f, 0, 1f); Gizmos.DrawMesh (mesh, Vector3.forward * 3f, Quaternion.identity, Vector3.one); } |
インスペクタでメッシュを指定出来るようにしています。
Gizmos.DrawMeshの第1引数はメッシュ、第2引数は表示位置、第3引数は角度、第4引数はメッシュのスケールを指定します。
メッシュにはStandardAssetsのEthanのBodyのメッシュを指定しました。
黄色いイーサンが表示されていますね(^_^)v
メッシュのワイヤーフレームを表示
メッシュのワイヤーフレームを表示するにはGizmos.DrawWireMeshを使用します。
1 2 3 4 5 6 7 8 | public Mesh mesh; void OnDrawGizmos() { Gizmos.color = new Color(0.5f, 0.5f, 0, 1f); Gizmos.DrawWireMesh (mesh, Vector3.forward * 5f, Quaternion.identity, Vector3.one * 2f); } |
引数の指定はGizmos.DrawMeshと同じです。
↑の例ではスケールを2倍にしたのでさきほどのイーサンの2倍の大きさになります。
↑のようにワイヤーフレームのイーサンが表示されました。
最後に全部のサンプルを同時に表示した画像を見てみましょう。
表示位置がかなりかぶってるのでわかり辛いですね、いったい何の為に載せたんでしょう・・・・(-_-)
最後のメッシュのイーサンのサイズ感だけわかればよかったかも・・・・。
終わりに
Gizmosを使用するとスクリプトから目印としてアイコンを表示したりする事が出来ます。
その為、敵が巡回する地点をアイコン表示しておき編集時にわかりやすくしたり出来ますね。
それ以外の用途は・・・・うーん、どういう時使えば有効ですかね?(^_^;)