Unity扩展:DrawGizmo特性使用小结

最近有一个小需求,要为曲线绘制工具增加一个边界提示,如图:

Unity扩展:DrawGizmo特性使用小结_第1张图片

一开始我尝试在OnSceneGUI里面绘制,后来发现只要一取消选择这个GameObject,绘制就会消失,为了能够一直显示这个图形,需要使用到DrawGizmo这个特性,如下:

        [DrawGizmo(GizmoType.NonSelected | GizmoType.Selected | GizmoType.Pickable)]
        public static void DrawRouteManagerGizmo(RoutesManager rmgr, GizmoType gizmoType)
        {   
            if (rmgr != null)
            {   
                BezierUtils.DrawRedRectBound(rmgr.bounds);
            }
        }

上面函数有两点需要说明

1参数:参数1是继承自MonoBehavior的组件类型,参数2是GizmoType。

2GizmoType:

NonSelected表示未选中的时候也要绘制

Selected表示选中的时候需要绘制

Pickable表示可以通过点击Gizmo去选取指定的GameObject

但是需要注意一点,绘制一定要通过Gizmos.DrawXXX,我已开始通过Handles.DrawLines绘制的红色矩形,就无法进行选取。当然实际上这个框是不需要选取的。这里只是为了说明问题。

        public static void DrawRedRectBound(Vector3[] verts )
        {
            Color old_g_color = Gizmos.color;
            Gizmos.color = Color.red;
            Gizmos.DrawLine(verts[0], verts[1]);
            Gizmos.DrawLine(verts[1], verts[2]);
            Gizmos.DrawLine(verts[2], verts[3]);
            Gizmos.DrawLine(verts[3], verts[0]);
            Gizmos.color = old_g_color;
            /*
            Color old_color = Handles.color;
            Handles.color = Color.red;
            Handles.DrawPolyLine(
                verts[0],
                verts[1],
                verts[2],
                verts[3],
                verts[0]);
            
            Handles.color = old_color;*/

        }

 

你可能感兴趣的:(Unity,C#,IMGUI)