在编辑模式下显示物体法向量脚本

在Unity开发过程中可能需要查看物体的法向量信息,使用自带的Editor功能可以实现:

using UnityEngine;
using System.Collections;
using UnityEditor;
public class ShowNormals : EditorWindow
{
    [MenuItem("Window/Tools/Show Normals")]
    public static void InitWindow()
    {
        EditorWindow.GetWindow<ShowNormals>();
    }

    public GameObject Model;
    public float NormalLength = 1f;

    private Color normalColor = Color.green;
    void OnEnable()
    {
        SceneView.onSceneGUIDelegate += OnSceneGUI;
    }

    void OnDisable()
    {
        SceneView.onSceneGUIDelegate -= OnSceneGUI;
    }

    void OnGUI()
    {
        NormalLength = EditorGUILayout.FloatField("Normal length", NormalLength);
        normalColor = EditorGUILayout.ColorField("Normal color", normalColor)  ;
    }



    void ShowNormal(Mesh mesh, Transform transform)
    {
        Handles.color = normalColor;
        var vertices = mesh.vertices;
        var normals = mesh.normals;

        for (var i = 0; i < normals.Length; i++)
        {

            var start = transform.TransformPoint(vertices[i]);
            var end = transform.TransformPoint(vertices[i] + normals[i] * NormalLength);
            Handles.DrawLine(start, end);
        }
    }
    void OnSceneGUI(SceneView sceneView)
    {
        if (Selection.activeGameObject != null)
        {
            var go = Selection.activeGameObject.GetComponent<MeshFilter>();
            if (go != null)
            {
                var mesh = go.sharedMesh;

                ShowNormal(mesh, go.transform);
            }
        }
    }
}

效果如图:

 

posted @ 2014-04-13 21:06  suntabu  阅读(499)  评论(0编辑  收藏  举报