private void OnDrawGizmosSelected() { if (!drawGizmos) { return; } if (separateGridData == null) { return; } GUPGrid.GroupData[] groupDatas = separateGridData.GetGroupDatas(); if (groupDatas == null || groupDatas.Length <= 0) { return; } Gizmos.color = groupDatas[currentIndex].editorColor; Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); RaycastHit[] hits = Physics.RaycastAll(ray); Vector3 point = Vector3.zero; bool allowHit = false; foreach (RaycastHit hit in hits) { if (hit.collider != null && hit.collider == boxCollider) { point = hit.point; allowHit = true; } } if (!allowHit) { return; } float mag = Mathf.Sqrt((grid.cellHeight * grid.cellHeight) + (grid.cellWidth * grid.cellWidth)) * 0.5f; Vector3[] vertices = grid.GetVertices(); Vector3 a = point + (vertices[0] - grid.transform.position).normalized * mag; Vector3 b = point + (vertices[1] - grid.transform.position).normalized * mag; Vector3 c = point + (vertices[2] - grid.transform.position).normalized * mag; Vector3 d = point + (vertices[3] - grid.transform.position).normalized * mag; Gizmos.DrawLine(a, d); Gizmos.DrawLine(b, c); UnityEditor.Handles.Label(point + Vector3.up, groupDatas[currentIndex].indices.Count.ToString()); }
private Vector3[] GetGizmoVertices(Vector3 point) { Vector3[] gridVerts = grid.GetVertices(); Vector3 a = gridVerts[0]; Vector3 b = gridVerts[1]; Vector3 c = gridVerts[2]; Vector3 d = gridVerts[3]; float mag = Mathf.Clamp(grid.cellWidth * 0.2f, grid.cellWidth * 0.2f, grid.cellHeight * 0.2f); Vector3 dir1 = (a - d).normalized * mag; Vector3 dir2 = (b - c).normalized * mag; Vector3 pA = point + dir1; Vector3 pB = point + dir2; Vector3 pC = point - dir2; Vector3 pD = point - dir1; return(new Vector3[] { pA, pB, pC, pD }); }