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); }
/// <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)); }
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; }
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); } }