/// <summary> /// 清空鼠标当前选中的目标 /// </summary> private void ClearCheckedTarget() { if (_currentCheckedTriangle != null) { _currentCheckedTriangle = null; } if (_currentCheckedEdge != null) { _currentCheckedEdge = null; } if (_currentCheckedVertex != null) { _currentCheckedVertex = null; } }
/// <summary> /// 截获鼠标当前选中的目标 /// </summary> private void CaptureCheckedTarget() { if (!_secondaryHandle && Event.current.button == 1 && Event.current.isMouse && Event.current.type == EventType.MouseDown) { RaycastHit hit; if (Physics.Raycast(HandleUtility.GUIPointToWorldRay(Event.current.mousePosition), out hit)) { if (hit.triangleIndex >= 0 && hit.triangleIndex < _meshMaker.Triangles.Count) { _currentCheckedTriangle = _meshMaker.Triangles[hit.triangleIndex]; } else { ClearCheckedTarget(); } } else { ClearCheckedTarget(); } if (_currentCheckedTriangle != null) { switch (_currentEditMode) { case EditMode.Vertex: _currentCheckedVertex = _currentCheckedTriangle.GetVertexByClick(hit.point); break; case EditMode.Edge: _currentCheckedEdge = _currentCheckedTriangle.GetEdgeByClick(hit.point); SetEditEdge(); break; case EditMode.Face: SetEditTriangle(); break; } } } Selection.activeObject = _meshMaker.gameObject; ShowCheckedTarget(); }
private void Init() { _meshMaker = target as MeshMaker; if (_meshMaker == null || EditorApplication.isPlaying) { return; } TransformChange(_meshMaker); _currentHoverTriangle = null; _currentCheckedTriangle = null; _currentCheckedVertex = null; _currentCheckedEdge = null; _currentHandleTool = HandleTool.None; _currentEditMode = EditMode.Vertex; _currentEditTriangle = new GameObject("Triangle"); _currentEditTriangle.transform.SetParent(_meshMaker.Target.transform); _currentEditTriangle.hideFlags = HideFlags.HideInHierarchy; _currentEditTriangleVertex1 = new GameObject("Vertex1"); _currentEditTriangleVertex1.transform.SetParent(_currentEditTriangle.transform); _currentEditTriangleVertex1.hideFlags = HideFlags.HideInHierarchy; _currentEditTriangleVertex2 = new GameObject("Vertex2"); _currentEditTriangleVertex2.transform.SetParent(_currentEditTriangle.transform); _currentEditTriangleVertex2.hideFlags = HideFlags.HideInHierarchy; _currentEditTriangleVertex3 = new GameObject("Vertex3"); _currentEditTriangleVertex3.transform.SetParent(_currentEditTriangle.transform); _currentEditTriangleVertex3.hideFlags = HideFlags.HideInHierarchy; _currentEditEdge = new GameObject("Edge"); _currentEditEdge.transform.SetParent(_meshMaker.Target.transform); _currentEditEdge.hideFlags = HideFlags.HideInHierarchy; _currentEditEdgeVertex1 = new GameObject("Vertex1"); _currentEditEdgeVertex1.transform.SetParent(_currentEditEdge.transform); _currentEditEdgeVertex1.hideFlags = HideFlags.HideInHierarchy; _currentEditEdgeVertex2 = new GameObject("Vertex2"); _currentEditEdgeVertex2.transform.SetParent(_currentEditEdge.transform); _currentEditEdgeVertex2.hideFlags = HideFlags.HideInHierarchy; if (_vertexButtonContent == null) { Texture2D t2d = AssetDatabase.LoadAssetAtPath("Assets/MeshEditor/MeshMaker/Editor/Texture/Vertex.png", typeof(Texture2D)) as Texture2D; _vertexButtonContent = new GUIContent("", t2d, "Vertex Edit Mode"); } if (_edgeButtonContent == null) { Texture2D t2d = AssetDatabase.LoadAssetAtPath("Assets/MeshEditor/MeshMaker/Editor/Texture/Edge.png", typeof(Texture2D)) as Texture2D; _edgeButtonContent = new GUIContent("", t2d, "Edge Edit Mode"); } if (_faceButtonContent == null) { Texture2D t2d = AssetDatabase.LoadAssetAtPath("Assets/MeshEditor/MeshMaker/Editor/Texture/Face.png", typeof(Texture2D)) as Texture2D; _faceButtonContent = new GUIContent("", t2d, "Face Edit Mode"); } if (_noneButtonContent == null) { Texture2D t2d = AssetDatabase.LoadAssetAtPath("Assets/MeshEditor/MeshMaker/Editor/Texture/None.png", typeof(Texture2D)) as Texture2D; _noneButtonContent = new GUIContent("", t2d, "None Edit Mode"); } _secondaryHandle = false; _secondaryHandleMode = SecondaryHandleMode.None; _sceneCamera = SceneView.lastActiveSceneView.camera; Undo.undoRedoPerformed += OnRecord; }
public void RefreshEdge() { Edge1 = new MeshMakerEdge(ref Vertex1, ref Vertex2); Edge2 = new MeshMakerEdge(ref Vertex2, ref Vertex3); Edge3 = new MeshMakerEdge(ref Vertex3, ref Vertex1); }