Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    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();
    }
Exemplo n.º 3
0
 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));
     }
 }
Exemplo n.º 4
0
    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);
            }
        }
    }