private void DrawSegmentedBox(UIMeshAnchoringV2 obj, Vector3 minAnchor, Vector3 maxAnchor) { var upperLeft = new Vector3(minAnchor.x, maxAnchor.y, minAnchor.z); var lowerRight = new Vector3(maxAnchor.x, minAnchor.y, minAnchor.z); int dottedSize = 5; Handles.DrawDottedLine(minAnchor, upperLeft, dottedSize); Handles.DrawDottedLine(upperLeft, maxAnchor, dottedSize); Handles.DrawDottedLine(maxAnchor, lowerRight, dottedSize); Handles.DrawDottedLine(lowerRight, minAnchor, dottedSize); }
public override void OnInspectorGUI() { UIMeshAnchoringV2 obj = (UIMeshAnchoringV2)target; if (!(obj.transform.parent is RectTransform)) { EditorGUILayout.HelpBox("The parent object must have a Rect Transform.", MessageType.Error); } DrawDefaultInspector(); SnapAnchorsToCroners(obj); serializedObject.ApplyModifiedProperties(); }
void SnapAnchorsToCroners(UIMeshAnchoringV2 obj) { if (obj.refParentTransform == null) { return; } Vector3[] corners = new Vector3[4]; obj.refParentTransform.GetWorldCorners(corners); if (GUILayout.Button("Snap Anchors to Corners")) { Undo.RecordObject(obj, "Snap acnhros to corners."); obj.minAnchor = new Vector2( (obj.refBounds.min.x - corners[0].x) / (corners[2].x - corners[0].x), (obj.refBounds.min.y - corners[0].y) / (corners[2].y - corners[0].y)); obj.maxAnchor = new Vector2( (obj.refBounds.max.x - corners[0].x) / (corners[2].x - corners[0].x), (obj.refBounds.max.y - corners[0].y) / (corners[2].y - corners[0].y)); } }
protected virtual void OnSceneGUI() { UIMeshAnchoringV2 obj = (UIMeshAnchoringV2)target; Vector3[] corners = new Vector3[4]; if (obj.refParentTransform == null) { return; } obj.refParentTransform.GetWorldCorners(corners); Vector3 minAnchor; Vector3 maxAnchor; float size = 1; float handleSize = HandleUtility.GetHandleSize(new Vector3(size, size, 1)); Vector3 snap = Vector3.one * 0.5f; DrawSegmentedBox(obj, obj.GetMinAnchorCurrentWorldPosition(corners), obj.GetMaxAnchorCurrentWorldPosition(corners)); EditorGUI.BeginChangeCheck(); if (SceneView.lastActiveSceneView.in2DMode) { minAnchor = Handles.FreeMoveHandle(obj.GetMinAnchorCurrentWorldPosition(corners), Quaternion.identity, 3, Vector3.one, DrawMinHandlesCap); maxAnchor = Handles.FreeMoveHandle(obj.GetMaxAnchorCurrentWorldPosition(corners), Quaternion.identity, 3, Vector3.one, DrawMaxHandlesCap); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(obj, "Anchors Positions Changed"); obj.minAnchor = new Vector2( Mathf.Clamp01((corners[0].x - minAnchor.x) / (corners[0].x - corners[2].x)), Mathf.Clamp01((corners[0].y - minAnchor.y) / (corners[0].y - corners[2].y))); obj.maxAnchor = new Vector2( Mathf.Clamp01((corners[0].x - maxAnchor.x) / (corners[0].x - corners[2].x)), Mathf.Clamp01((corners[0].y - maxAnchor.y) / (corners[0].y - corners[2].y))); obj.SetOffsets(corners); } } }