Ejemplo n.º 1
0
        /// <summary>
        /// 绘制Border的Gizmos
        /// </summary>
        protected void EditorDrawBorderGizmos()
        {
            Color old = Gizmos.color;

            GUIStyle textStyle = new GUIStyle();

            textStyle.normal.textColor = m_EditorBorderColor;

            // 获取边框左下角与右上角的世界坐标
            Vector3 leftDown = grid.GetCellCenterWorld(leftDownPosition) - halfCellSize;
            Vector3 rightUp  = grid.GetCellCenterWorld(rightUpPosition) + halfCellSize;

            // 绘制左下角Cell与右上角Cell的Position
            Handles.Label(leftDown, (new Vector2Int(leftDownPosition.x, leftDownPosition.y)).ToString(), textStyle);
            Handles.Label(rightUp, (new Vector2Int(rightUpPosition.x, rightUpPosition.y)).ToString(), textStyle);

            if (mapRect.width > 0 && mapRect.height > 0)
            {
                Gizmos.color = m_EditorBorderColor;

                // 边框的长与宽
                Vector3 size = Vector3.Scale(new Vector3(width, height), grid.cellSize);

                // 边框的中心坐标
                Vector3 center = leftDown + size / 2f;

                // 绘制边框
                Gizmos.DrawWireCube(center, size);
            }

            Gizmos.color = old;
        }
Ejemplo n.º 2
0
        public static void DrawLabel(Vector3 position, string text, GUIStyle style = default(GUIStyle), Color color = default(Color), float offsetX = 0f, float offsetY = 0f)
        {
#if UNITY_EDITOR
            if (IsHandleHackAvailable)
            {
                Transform cam = UnityEditor.SceneView.currentDrawingSceneView != null ?
                                UnityEditor.SceneView.currentDrawingSceneView.camera.transform : // Scene View
                                Camera.main.transform;                                           // Only Game View
                if (Vector3.Dot(cam.forward, position - cam.position) > 0)
                {
                    Vector3 pos = position;
                    if (offsetX != 0f || offsetY != 0f)
                    {
                        Vector3 camRightVector = cam.right * offsetX;                         // base on view
                        pos += camRightVector + new Vector3(0f, offsetY, 0f);                 // base on target
                    }

                    if (style == default(GUIStyle))
                    {
                        if (color == default(Color))
                        {
                            Handles.Label(pos, text, GUI.skin.textArea);
                        }
                        else
                        {
                            style = new GUIStyle(GUI.skin.textArea);
                            Color old = style.normal.textColor;
                            style.normal.textColor = color;
                            Handles.Label(pos, text, style);
                            style.normal.textColor = old;
                        }
                    }
                    else
                    {
                        if (color == default(Color))
                        {
                            Handles.Label(pos, text, style);
                        }
                        else
                        {
                            Color old = style.normal.textColor;
                            style.normal.textColor = color;
                            Handles.Label(pos, text, style);
                            style.normal.textColor = old;
                        }
                    }
                }
            }
#endif
        }
Ejemplo n.º 3
0
        public static void DrawArc(Vector3 center, Vector3 normal, Vector3 from, float angle, float radius, Color color, bool constantScreenSize = true)
        {
#if UNITY_EDITOR
            if (IsHandleHackAvailable)
            {
                if (constantScreenSize)
                {
                    radius *= HandleUtility.GetHandleSize(center);
                }
                using (new HandleColorScope(color))
                {
                    Handles.DrawSolidArc(center, normal, from, angle, radius);
                }
            }
#endif
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 绘制Cell的Gizmos
        /// </summary>
        protected void EditorDrawCellGizmos()
        {
            // 用于获取鼠标位置
            Event e = Event.current;

            if (e.type != EventType.Repaint)
            {
                return;
            }

            // 获取当前操作Scene面板
            SceneView sceneView = SceneView.currentDrawingSceneView;

            if (sceneView == null)
            {
                return;
            }

            Color old = Gizmos.color;

            /// 获取鼠标世界坐标:
            /// Event是从左上角(Left Up)开始,
            /// 而Camera是从左下角(Left Down),
            /// 需要转换才能使用Camera的ScreenToWorldPoint方法。
            Vector2 screenPosition = new Vector2(e.mousePosition.x, sceneView.camera.pixelHeight - e.mousePosition.y);
            Vector2 worldPosition  = sceneView.camera.ScreenToWorldPoint(screenPosition);

            // 当前鼠标所在Cell的Position
            Vector3Int cellPostion = grid.WorldToCell(worldPosition);
            // 当前鼠标所在Cell的Center坐标
            Vector3 cellCenter = grid.GetCellCenterWorld(cellPostion);

            /// 绘制当前鼠标下的Cell边框与Position
            /// 如果包含Cell,正常绘制
            /// 如果不包含Cell,改变颜色,并多绘制一个叉
            if (Contains(cellPostion))
            {
                GUIStyle textStyle = new GUIStyle();
                textStyle.normal.textColor = m_EditorCellColor;
                Gizmos.color = m_EditorCellColor;

                Handles.Label(cellCenter - halfCellSize, (new Vector2Int(cellPostion.x, cellPostion.y)).ToString(), textStyle);
                Gizmos.DrawWireCube(cellCenter, grid.cellSize);
            }
            else
            {
                GUIStyle textStyle = new GUIStyle();
                textStyle.normal.textColor = m_EditorErrorColor;
                Gizmos.color = m_EditorErrorColor;

                Handles.Label(cellCenter - halfCellSize, (new Vector2Int(cellPostion.x, cellPostion.y)).ToString(), textStyle);
                Gizmos.DrawWireCube(cellCenter, grid.cellSize);

                // 绘制Cell对角线
                Vector3 from = cellCenter - halfCellSize;
                Vector3 to   = cellCenter + halfCellSize;
                Gizmos.DrawLine(from, to);
                float tmpX = from.x;
                from.x = to.x;
                to.x   = tmpX;
                Gizmos.DrawLine(from, to);
            }

            Gizmos.color = old;
        }
Ejemplo n.º 5
0
 public void SetDiscSectionPoints(Vector3[] dest, Vector3 center, Vector3 normal, Vector3 from, float angle, float radius)
 {
     UnityHandles.SetDiscSectionPoints(dest, center, normal, from, angle, radius);
 }
Ejemplo n.º 6
0
 public void DrawLine(Vector3 p1, Vector3 p2)
 {
     UnityHandles.DrawLine(p1, p2);
 }
Ejemplo n.º 7
0
 public void DrawAAPolyLine(ITexture2D lineTex, params Vector3[] points)
 {
     UnityHandles.DrawAAPolyLine((UnityTexture2D)lineTex, points);
 }
Ejemplo n.º 8
0
 public Vector3[] MakeBezierPoints(Vector3 startPosition, Vector3 endPosition, Vector3 startTangent, Vector3 endTangent, int division)
 {
     return(UnityHandles.MakeBezierPoints(startPosition, endPosition, startTangent, endTangent, division));
 }