예제 #1
0
    Color GetHandleColor(VertNames vertName)
    {
        Color handleColor = Color.white;

        switch (vertName)
        {
        case VertNames.TopLeft:
            handleColor = (selectTopLeft) ? Color.yellow : Color.green;
            break;

        case VertNames.TopRight:
            handleColor = (selectTopRight) ? Color.yellow : Color.green;
            break;

        case VertNames.BottomLeft:
            handleColor = (selectBottomLeft) ? Color.yellow : Color.green;
            break;

        case VertNames.BottomRight:
            handleColor = (selectBottomRight) ? Color.yellow : Color.green;
            break;
        }

        return(handleColor);
    }
예제 #2
0
    void OnSceneGUI()
    {
        editor = target as QuadEditor;

        if (setVertices && editor.mesh)
        {
            setVertices = false;

            defaultBottomLeft  = editor.mesh.vertices[0];
            defaultTopRight    = editor.mesh.vertices[1];
            defaultBottomRight = editor.mesh.vertices[2];
            defaultTopLeft     = editor.mesh.vertices[3];

            bottomLeft  = editor.mesh.vertices[0];
            topRight    = editor.mesh.vertices[1];
            bottomRight = editor.mesh.vertices[2];
            topLeft     = editor.mesh.vertices[3];
        }

        int controlID = GUIUtility.GetControlID(FocusType.Passive);

        if (Event.current.type == EventType.Layout)
        {
            HandleUtility.AddDefaultControl(controlID);
        }
        else
        {
            Ray     screenToWordCoords = Camera.current.ScreenPointToRay(new Vector3(Event.current.mousePosition.x, -Event.current.mousePosition.y + Camera.current.pixelHeight));
            Vector3 mousePos           = screenToWordCoords.origin;

            mousePos = new Vector3(mousePos.x, mousePos.y, editor.transform.position.z);

            Handles.color = GetHandleColor(VertNames.TopLeft);
            Debug.Log(topLeft + editor.transform.position);
            Handles.SphereCap(controlID, new Vector3(editor.transform.position.x + topLeft.x, editor.transform.position.y + topLeft.y, 0), editor.transform.rotation, 0.05f);
            Handles.color = GetHandleColor(VertNames.TopRight);
            Handles.SphereCap(controlID, new Vector3(editor.transform.position.x + topRight.x, editor.transform.position.y + topRight.y, 0), editor.transform.rotation, 0.05f);
            Handles.color = GetHandleColor(VertNames.BottomRight);
            Handles.SphereCap(controlID, new Vector3(editor.transform.position.x + bottomRight.x, editor.transform.position.y + bottomRight.y, 0), editor.transform.rotation, 0.05f);
            Handles.color = GetHandleColor(VertNames.BottomLeft);
            Handles.SphereCap(controlID, new Vector3(editor.transform.position.x + bottomLeft.x, editor.transform.position.y + bottomLeft.y, 0), editor.transform.rotation, 0.05f);

            if (Event.current.type == EventType.MouseDown && Event.current.button == 0)
            {
                isMouseDragging = true;
                UpdateVertexHandles(mousePos);
            }
            else if (Event.current.type == EventType.MouseUp && Event.current.button == 0)
            {
                isMouseDragging = false;
                UpdateVertexHandles(Vector3.zero, true);
            }

            selectedVertex = (selectTopLeft) ? VertNames.TopLeft : (selectTopRight) ? VertNames.TopRight : (selectBottomLeft) ?
                             VertNames.BottomLeft : (selectBottomRight) ? VertNames.BottomRight : VertNames.None;

            MoveVertex(mousePos);
            editor.mesh.vertices = new Vector3[]
            {
                bottomLeft,
                topRight,
                bottomRight,
                topLeft
            };
        }
    }