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); }
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 }; } }