private void SetUpCustomAnchors(RectTransform rectTransform, CustomAnchorTypes customAnchorType)
    {
        Vector2 pivot = rectTransform.pivot;

        //rectTransform.pivot = new Vector2(0.5f, 0.5f);


        var absoluteSize              = RectTransformUtilities.GetAbsoluteSize(rectTransform);
        var absolutePos               = RectTransformUtilities.GetAbsolutePosition(rectTransform);
        var parentAbsoluteSize        = RectTransformUtilities.GetAbsoluteSize(rectTransform.parent.GetComponent <RectTransform>());
        var offsetForAnchors          = new Vector2((0.5f - rectTransform.pivot.x) * rectTransform.sizeDelta.x, (0.5f - rectTransform.pivot.y) * rectTransform.sizeDelta.y);
        var offsetForAnchoredPosition = new Vector2((0.5f - rectTransform.pivot.x) * absoluteSize.x, (0.5f - rectTransform.pivot.y) * absoluteSize.y);

        Debug.Log(offsetForAnchors);
        Debug.Log(offsetForAnchoredPosition);

        absolutePos        += offsetForAnchors;
        rectTransform.pivot = new Vector2(0.5f, 0.5f);

        rectTransform.anchorMin = new Vector2();
        rectTransform.anchorMax = new Vector2();

        rectTransform.anchorMin = CustomAnchorMin(absoluteSize, absolutePos, parentAbsoluteSize, rectTransform.pivot, customAnchorType);
        rectTransform.anchorMax = CustomAnchorMax(absoluteSize, absolutePos, parentAbsoluteSize, rectTransform.pivot, customAnchorType);

        rectTransform.anchoredPosition = CustomAnchorPosition(absoluteSize, customAnchorType, offsetForAnchoredPosition);
        rectTransform.sizeDelta        = CustomAnchorSize(absoluteSize, customAnchorType);

        rectTransform.pivot = pivot;
    }
    public static void SetRect(this RectTransform rectTransform, Rect rect)
    {
        if (rectTransform is null)
        {
            throw new NullReferenceException(nameof(rectTransform));
        }
        if (!rectTransform)
        {
            throw new MissingReferenceException(nameof(rectTransform));
        }

        RectTransformUtilities.SetRectWithoutChecks(rectTransform, rect);
    }
Example #3
0
        /// <summary>
        /// Determine if the next mouse pos would result in the rect staying within screenbounds
        /// </summary>
        /// <param name="newMousePos"></param>
        /// <param name="fourCornerArray"></param>
        /// <returns></returns>
        private bool DetermineValidMousepos(Vector2 newMousePos, out Vector2[] fourCornerArray)
        {
            var diff = lastFrameMousePos - newMousePos;

            fourCornerArray = lastFrameRectCorners;
            for (int i = 0; i < 4; i++)
            {
                fourCornerArray[i] = new Vector2(
                    fourCornerArray[i].x - diff.x,
                    fourCornerArray[i].y - diff.y);
            }
            ;
            return(RectTransformUtilities.CornersAreWithinScreenBounds(fourCornerArray));
        }
Example #4
0
        public void OnBeginDrag(PointerEventData eventData)
        {
            var mousePos   = Input.mousePosition;
            var mousePosv2 = new Vector2(
                mousePos.x,
                mousePos.y);

            lastFrameMousePos = mousePosv2;

            var center = RectTransformUtilities.GetScreenSpacePos(rectTransform);

            lastFrameRectCorners = RectTransformUtilities.GetScreenCoordinatesOfCorners(rectTransform, center);

            offset = mousePosv2 - center;
        }
Example #5
0
        public void OnDrag(PointerEventData eventData)
        {
            var mousePos   = Input.mousePosition;
            var mousePosv2 = new Vector2(
                mousePos.x,
                mousePos.y);

            Vector2[] fourCornerArray;

            if (DetermineValidMousepos(mousePosv2, out fourCornerArray))
            {
                RectTransformUtilities.SetScreenSpacePos(rectTransform, mousePosv2 - offset);
            }

            lastFrameMousePos    = mousePosv2;
            lastFrameRectCorners = fourCornerArray;
        }
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        GetData();

        //Show if target parent is not null
        if (HasParent)
        {
            ShowAnchorSetter = EditorGUILayout.Foldout(ShowAnchorSetter, ShowAnchorSetter ? "Hide Custom Anchor Setter" : "Show Custom Anchor Setter");

            if (ShowAnchorSetter)
            {
                EditorGUILayout.Vector2Field("Absolute pos", RectTransformUtilities.GetAbsolutePosition(_target));
                EditorGUILayout.Vector2Field("Absolute size", RectTransformUtilities.GetAbsoluteSize(_target));

                int width = 150;

                GUI.backgroundColor = Color.clear;
                GUILayoutOption[] options = { GUILayout.MaxWidth(100.0f), GUILayout.MinWidth(10.0f) };

                GUILayout.BeginHorizontal(GUILayout.Width(width));
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Top_L_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.LeftTopCorner);
                }
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Top_Center_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.Top);
                }
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Top_R_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.RightTopCorner);
                }
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Streach_Top_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.StretchX_Top);
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal(GUILayout.Width(width));
                if (GUILayout.Button(buttonsIcons["Pivot_Button_R_Center_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.Left);
                }
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Center_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.Center);
                }
                if (GUILayout.Button(buttonsIcons["Pivot_Button_L_Center_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.Right);
                }
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Streach_Center_Horizontal_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.StretchX);
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal(GUILayout.Width(width));
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Down_L_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.LeftBottomCorner);
                }
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Down_Center_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.Bottom);
                }
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Down_R_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.RightBottomCorner);
                }
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Streach_Down_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.StretchX_Bottom);
                }
                GUILayout.EndHorizontal();
                GUILayout.BeginHorizontal(GUILayout.Width(width));
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Streach_L_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.StretchY_Left);
                }
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Streach_Center_Vertical_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.StretchY);
                }
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Streach_Center_R_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.StretchY_Right);
                }
                if (GUILayout.Button(buttonsIcons["Pivot_Button_Streach_Center_unactive"]))
                {
                    SetCutomAnchorsButton_OnClick(CustomAnchorTypes.OnCorners);
                }
                GUILayout.EndHorizontal();
            }
        }
        else    //Show when there is no parent
        {
            GUILayout.Label("No parent with RectTransform", EditorStyles.centeredGreyMiniLabel);
        }
    }