【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 (){
        // 色を変更
        Gizmos.color = Color.blue;

        // 法線方向にラインを描画
        var matrix = Matrix4x4.TRS(transform.position, transform.rotation, transform.lossyScale);
        var from = matrix.MultiplyPoint(Vector3.zero);
        foreach (var normal in GetComponent<MeshFilter>().mesh.normals) {
            var to = matrix.MultiplyPoint(normal);
            Gizmos.DrawLine(from, to);
        }
    }
}

変換行列を作ってるのは回転などに対応するためです。
これを Cube とか Sphere とかにアタッチします。

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

法線が表示されました。