【Unity】Sceneビューにギズモを表示してついでに法線を可視化する

f:id:halya_11:20180131215230p:plain:w300

ギズモ?

ギズモとはUnityエディタのSceneビューにのみ表示される、開発用のオブジェクトです。

f:id:halya_11:20180131213741p:plain:w300

この矢印がギズモの例です。

ギズモは最初から用意されているものの他に、カスタムして表示することができます。

ギズモを表示してみる

using UnityEngine;

public class DrawGizmo : MonoBehaviour {

    private void OnDrawGizmos (){
        // ワイアーキューブを表示する
        Gizmos.DrawWireCube(Vector3.zero, Vector3.one);
    }
}

OnDrawGizmos() の中に処理を書くだけで表示できます。

f:id:halya_11:20180131213800p:plain:w300

法線を可視化する

何か意味あることをやらないとつまらないので、法線を可視化してみましょう。

using UnityEngine;

public class DrawGizmo : MonoBehaviour {

    private void OnDrawGizmos (){

        var preColor            = Gizmos.color;
        var preMatrix           = Gizmos.matrix;
        Gizmos.color            = Color;
        Gizmos.matrix           = transform.localToWorldMatrix;

        // 法線方向にラインを描画
        var mesh                = GetComponent<MeshFilter>().sharedMesh;
        for (int i = 0; i < mesh.normals.Length; i++) {
            var from            = mesh.vertices[i];
            var to              = from + mesh.normals[i];
            Gizmos.DrawLine(from, to);
        }
            
        Gizmos.color            = preColor;
        Gizmos.matrix           = preMatrix;
    }
}

これを Cube とか Sphere とかにアタッチします。

f:id:halya_11:20180131215230p:plain:w300

法線が表示されました。