// Rect Transform will be resized on Start().
    void Start()
    {
        RectTransform rect = this.GetComponent <RectTransform>();

        if (rect != null)
        {
            rect.SetSizeWithCurrentAnchors(
                mainAxis,
                resizeUnits == Unit.Percentage ? GetPixelsForPercentage(mainAxis, size) : size
                );

            if (limitCrossAxis)
            {
                RectTransform.Axis crossAxis = (mainAxis == RectTransform.Axis.Horizontal) ? RectTransform.Axis.Horizontal : RectTransform.Axis.Vertical;

                rect.SetSizeWithCurrentAnchors(
                    crossAxis,
                    crossAxisUnits == Unit.Percentage ? GetPixelsForPercentage(crossAxis, maxCrossSize) : maxCrossSize
                    );
            }
        }
        else
        {
            Debug.LogWarning("ResponsiveUI: GameObject with name " + gameObject.name + " has not a Rect Transform component, so it can't be resized");
        }
    }
Example #2
0
        RectTransform.Axis GetAxis()
        {
            int horizontal = 0;
            int vertical   = 0;
            int count      = 0;

            foreach (PickerType picker in GetTargetPickers())
            {
                RectTransform.Axis layout = picker.layout;

                if (layout == RectTransform.Axis.Horizontal)
                {
                    ++horizontal;
                }
                if (layout == RectTransform.Axis.Vertical)
                {
                    ++vertical;
                }
                ++count;
            }

            if (count == horizontal)
            {
                return(RectTransform.Axis.Horizontal);
            }
            if (count == vertical)
            {
                return(RectTransform.Axis.Vertical);
            }
            return((RectTransform.Axis)(-1));
        }
Example #3
0
        public static UIAnchor GravityToAnchor(LayoutGravity gravity, RectTransform.Axis axis)
        {
            if (axis == RectTransform.Axis.Vertical)
            {
                switch (gravity)
                {
                case LayoutGravity.Top: return(UIAnchor.Top);

                case LayoutGravity.Bottom: return(UIAnchor.Bottom);

                case LayoutGravity.CenterVertical:
                case LayoutGravity.Center: return(UIAnchor.Center);
                }
            }
            else
            {
                switch (gravity)
                {
                case LayoutGravity.Start: return(UIAnchor.Left);

                case LayoutGravity.End: return(UIAnchor.Right);

                case LayoutGravity.CenterHorizontal:
                case LayoutGravity.Center: return(UIAnchor.Center);
                }
            }
            return(UIAnchor.None);
        }
Example #4
0
        public override void OnInspectorGUI()
        {
            EditorGUI.BeginChangeCheck();

            base.OnInspectorGUI();

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObjects(GetRecordTargets(), "picker changed");

                foreach (PickerType picker in GetTargetPickers())
                {
                    picker.SyncItemList(true);
                }
            }


            RectTransform.Axis axis    = GetAxis();
            RectTransform.Axis newAxis = (RectTransform.Axis)EditorGUILayout.EnumPopup("Layout", axis);

            if (axis != newAxis)
            {
                Undo.RecordObjects(GetRecordTargets(), "picker changed");

                foreach (PickerType picker in GetTargetPickers())
                {
                    picker.layout = newAxis;
                }
            }
        }
Example #5
0
        private static void SharkUI(CalcSize calcSize, ApplyValue applyValue, RectTransform.Axis axis)
        {
            var list = Utils.GetRectTransforms();

            if (list.Count < 2)
            {
                return;
            }

            float size = 10000000f;

            Vector3[] corners = new Vector3[4];
            for (var i = 0; i < list.Count; i++)
            {
                list[i].GetWorldCorners(corners);
                float _minV, _maxV;
                size = Mathf.Min(size, calcSize(corners, out _minV, out _maxV));
            }
            foreach (var rt in list)
            {
                var v = applyValue(rt, size);
                Undo.RecordObject(rt, "Expand or Shark UI");
                rt.SetSizeWithCurrentAnchors(axis, v.x);
            }
        }
        // Token: 0x060024F4 RID: 9460 RVA: 0x000A1188 File Offset: 0x0009F388
        public void Update()
        {
            if (this.choiceControllers.Count == 0)
            {
                return;
            }
            if (this.currentDisplayChoiceIndex >= this.choiceControllers.Count)
            {
                this.currentDisplayChoiceIndex = this.choiceControllers.Count - 1;
            }
            Vector3 localPosition = this.choiceControllers[this.currentDisplayChoiceIndex].transform.localPosition;
            float   target        = 0f;

            RectTransform.Axis axis = this.movementAxis;
            if (axis != RectTransform.Axis.Horizontal)
            {
                if (axis == RectTransform.Axis.Vertical)
                {
                    target = -localPosition.y;
                }
            }
            else
            {
                target = -localPosition.x;
            }
            this.currentPosition = Mathf.SmoothDamp(this.currentPosition, target, ref this.velocity, this.movementDuration);
            this.UpdatePosition();
        }
        float ClampSize(RectTransform.Axis axis, float size)
        {
            switch (axis)
            {
            case RectTransform.Axis.Horizontal:

                if (CurrentSettings.HasMinWidth)
                {
                    size = Mathf.Max(size, minWidthSizers.GetCurrentItem(minWidthSizerFallback).CalculateSize());
                }

                if (CurrentSettings.HasMaxWidth)
                {
                    size = Mathf.Min(size, maxWidthSizers.GetCurrentItem(maxWidthSizerFallback).CalculateSize());
                }
                break;

            case RectTransform.Axis.Vertical:

                if (CurrentSettings.HasMinHeight)
                {
                    size = Mathf.Max(size, minHeightSizers.GetCurrentItem(minHeightSizerFallback).CalculateSize());
                }

                if (CurrentSettings.HasMaxHeight)
                {
                    size = Mathf.Min(size, maxHeightSizers.GetCurrentItem(maxHeightSizerFallback).CalculateSize());
                }
                break;
            }

            return(size);
        }
Example #8
0
        public static UIPivot AnchorToPivot(UIAnchor anchor, RectTransform.Axis axis)
        {
            if (axis == RectTransform.Axis.Vertical)
            {
                switch (anchor)
                {
                case UIAnchor.Top: return(UIPivot.Top);

                case UIAnchor.Bottom: return(UIPivot.Bottom);

                case UIAnchor.Center: return(UIPivot.Center);
                }
            }
            else
            {
                switch (anchor)
                {
                case UIAnchor.Left: return(UIPivot.Left);

                case UIAnchor.Right: return(UIPivot.Right);

                case UIAnchor.Center: return(UIPivot.Center);
                }
            }
            return(UIPivot.None);
        }
Example #9
0
        public void SetSizeWithCurrentAnchors(RectTransform.Axis axis, float size)
        {
            Vector2 sizeDelta = this.sizeDelta;

            sizeDelta[(int)axis] = size - this.GetParentSize()[(int)axis] * (this.anchorMax[(int)axis] - this.anchorMin[(int)axis]);
            this.sizeDelta       = sizeDelta;
        }
Example #10
0
        public void SetSizeWithCurrentAnchors(RectTransform.Axis axis, float size)
        {
            int     index     = (int)axis;
            Vector2 sizeDelta = this.sizeDelta;

            sizeDelta[index] = size - this.GetParentSize()[index] * (this.anchorMax[index] - this.anchorMin[index]);
            this.sizeDelta   = sizeDelta;
        }
Example #11
0
        public virtual void setElementSize(RectTransform.Axis axis, float newHeight)
        {
            // TODO: UNTESTED! Necessary for proper text paragraph scaling!

            RectTransform rTrans = transform as RectTransform;

            rTrans.SetSizeWithCurrentAnchors(axis, uiLabel.preferredHeight);
        }
        protected override void Reset()
        {
            base.Reset();

            activeAxis = axis = RectTransform.Axis.Horizontal;

            a = target.sizeDelta.x;
            b = target.sizeDelta.x;
        }
Example #13
0
    static int SetSizeWithCurrentAnchors(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 3);
        RectTransform obj = (RectTransform)LuaScriptMgr.GetUnityObjectSelf(L, 1, "RectTransform");

        RectTransform.Axis arg0 = (RectTransform.Axis)LuaScriptMgr.GetNetObject(L, 2, typeof(RectTransform.Axis));
        float arg1 = (float)LuaScriptMgr.GetNumber(L, 3);

        obj.SetSizeWithCurrentAnchors(arg0, arg1);
        return(0);
    }
Example #14
0
    private static int SetSizeWithCurrentAnchors(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 3);
        RectTransform rectTransform = (RectTransform)LuaScriptMgr.GetUnityObjectSelf(L, 1, "RectTransform");

        RectTransform.Axis axis = (RectTransform.Axis)((int)LuaScriptMgr.GetNetObject(L, 2, typeof(RectTransform.Axis)));
        float size = (float)LuaScriptMgr.GetNumber(L, 3);

        rectTransform.SetSizeWithCurrentAnchors(axis, size);
        return(0);
    }
 /// <summary>
 /// Set size.
 /// </summary>
 /// <param name="axis">Axis.</param>
 /// <param name="size">New size.</param>
 public void SetSize(RectTransform.Axis axis, float size)
 {
     if (axis == RectTransform.Axis.Horizontal)
     {
         NewWidth = size;
     }
     else
     {
         NewHeight = size;
     }
 }
 //Given an axis and a percentage, return the screen percentage in pixels.
 public static float GetPixelsForPercentage(RectTransform.Axis axis, float percentage)
 {
     if (axis == RectTransform.Axis.Horizontal)
     {
         return(Screen.width / 100 * percentage);
     }
     else if (axis == RectTransform.Axis.Vertical)
     {
         return(Screen.height / 100 * percentage);
     }
     return(0f);
 }
Example #17
0
        public static RectTransform Align(this RectTransform me, RectTransform.Axis axis, float target)
        {
            var axisVisualCenterPosition = me.GetVisualCenter()[axis.CoordinateIndex()];
            var offset = target - axisVisualCenterPosition;

            var offsetVector = new Vector3 {
                [axis.CoordinateIndex()] = offset
            };

            me.position += offsetVector;

            return(me);
        }
Example #18
0
    // 使Anchors的宽高与Text内容一致
    public static IEnumerator TextPreferredSize(Text t, RectTransform.Axis axis)
    {
        yield return(new WaitForEndOfFrame());

        TextGenerator          tg       = t.cachedTextGeneratorForLayout;
        TextGenerationSettings settings = t.GetGenerationSettings(Vector2.zero);
        float size = (axis == RectTransform.Axis.Horizontal) ?
                     tg.GetPreferredWidth(t.text, settings) : tg.GetPreferredHeight(t.text, settings);

        size /= t.pixelsPerUnit;
        RectTransform rectTransform = t.GetComponent <RectTransform>();

        rectTransform.SetSizeWithCurrentAnchors(axis, size);
    }
Example #19
0
        public static Vector2 GetAxisPosition_AsVector2(this RectTransform me, RectTransform.Axis axis)
        {
            switch (axis)
            {
            case RectTransform.Axis.Horizontal:
                return(Vector2.right * GetAxisPosition_AsFloat(me, axis));

            case RectTransform.Axis.Vertical:
                return(Vector2.up * GetAxisPosition_AsFloat(me, axis));

            default:
                throw new ArgumentOutOfRangeException(nameof(axis), axis, null);
            }
        }
Example #20
0
        public static float GetAxisSize(this RectTransform me, RectTransform.Axis axis)
        {
            switch (axis)
            {
            case RectTransform.Axis.Horizontal:
                return(me.rect.width);

            case RectTransform.Axis.Vertical:
                return(me.rect.height);

            default:
                throw new ArgumentOutOfRangeException(nameof(axis), axis, $"I have no idea what axis {axis} is!");
            }
        }
Example #21
0
        /// <summary>
        /// "Inverts" <paramref name="axis"/>, returning <see cref="RectTransform.Axis.Horizontal"/> for <see cref="RectTransform.Axis.Vertical"/>, etc.
        /// </summary>
        /// <param name="axis"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        public static RectTransform.Axis Inverse(this RectTransform.Axis axis)
        {
            switch (axis)
            {
            case RectTransform.Axis.Horizontal:
                return(RectTransform.Axis.Vertical);

            case RectTransform.Axis.Vertical:
                return(RectTransform.Axis.Horizontal);

            default:
                throw EnumUtils.InvalidEnumArgumentException(nameof(axis), axis);
            }
        }
Example #22
0
        public static float GetAxisPosition_AsFloat(this RectTransform me, RectTransform.Axis axis)
        {
            switch (axis)
            {
            case RectTransform.Axis.Horizontal:
                return(me.position.x);

            case RectTransform.Axis.Vertical:
                return(me.position.y);

            default:
                throw new ArgumentOutOfRangeException(nameof(axis), axis, null);
            }
        }
Example #23
0
        /// <summary>
        /// Converts an <see cref="RectTransform.Axis"/> into an index for use with a <see cref="Vector2"/> (or <see cref="Vector3">3</see>, or <see cref="Vector4">4</see>)'s <see cref="Vector2.this"/> accessor.
        /// </summary>
        /// <remarks>
        /// While it is true that the <see cref="RectTransform.Axis"/> <see cref="Enum"/>'s values can be explicitly converted to the correct integers (i.e., <see cref="RectTransform.Axis.Horizontal"/> is ordinal 1), this is more "defensive" (as in, unlikely to break if Unity introduces a fifth dimension), and this also makes the programmer's intent explicit (as opposed to vaguely casting an <see cref="Enum"/> to an int)
        /// </remarks>
        /// <param name="axis"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        public static int CoordinateIndex(this RectTransform.Axis axis)
        {
            switch (axis)
            {
            case RectTransform.Axis.Horizontal:
                return(0);

            case RectTransform.Axis.Vertical:
                return(1);

            default:
                throw EnumUtils.InvalidEnumArgumentException(nameof(axis), axis);
            }
        }
Example #24
0
        public float Dimension(RectTransform.Axis dimension)
        {
            switch (dimension)
            {
            case RectTransform.Axis.Horizontal:
                return(Width);

            case RectTransform.Axis.Vertical:
                return(Height);

            default:
                throw EnumUtils.InvalidEnumArgumentException(nameof(dimension), dimension);
            }
        }
        public override void OnInspectorGUI()
        {
            EditorGUI.BeginChangeCheck();

            base.OnInspectorGUI();

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObjects(GetRecordTargets(), "picker changed");

                foreach (PickerType picker in GetTargetPickers())
                {
                    picker.SyncItemList(true);
                }

                PickerType targetPicker = target as PickerType;

                if (targetPicker != null)
                {
                    GameObject itemSource = targetPicker.itemSource;

                    if (itemSource != null)
                    {
                        RectTransform rectTransform = itemSource.GetComponent <RectTransform>();

                        if (rectTransform != null && rectTransform.sizeDelta != targetPicker.itemSize)
                        {
                            rectTransform.sizeDelta = targetPicker.itemSize;
                        }
                    }
                }
            }


            RectTransform.Axis axis    = GetAxis();
            RectTransform.Axis newAxis = (RectTransform.Axis)EditorGUILayout.EnumPopup("Layout", axis);

            if (axis != newAxis)
            {
                Undo.RecordObjects(GetRecordTargets(), "picker changed");

                foreach (PickerType picker in GetTargetPickers())
                {
                    picker.layout = newAxis;
                }
            }
        }
Example #26
0
        /// <summary>
        /// 获取 UI 组件锚点
        /// </summary>
        /// <param name="rectTransform">UI 组件</param>
        /// <param name="axis">要获取的轴</param>
        public static UIAnchor GetUIAnchor(RectTransform rectTransform, RectTransform.Axis axis)
        {
            UIAnchor anchor = UIAnchor.None;

            if (axis == RectTransform.Axis.Horizontal)
            {
                float x1 = rectTransform.anchorMin.x, x2 = rectTransform.anchorMax.x;
                if (x1 == 0 && x2 == 0)
                {
                    anchor = UIAnchor.Left;
                }
                else if (x1 == 0.5f && x2 == 0.5f)
                {
                    anchor = UIAnchor.Center;
                }
                else if (x1 == 1 && x2 == 1)
                {
                    anchor = UIAnchor.Right;
                }
                else if (x1 == 0 && x2 == 1)
                {
                    anchor = UIAnchor.Stretch;
                }
            }
            else if (axis == RectTransform.Axis.Vertical)
            {
                float y1 = rectTransform.anchorMin.y, y2 = rectTransform.anchorMax.y;
                if (y1 == 0 && y2 == 0)
                {
                    anchor = UIAnchor.Left;
                }
                else if (y1 == 0.5f && y2 == 0.5f)
                {
                    anchor = UIAnchor.Center;
                }
                else if (y1 == 1 && y2 == 1)
                {
                    anchor = UIAnchor.Right;
                }
                else if (y1 == 0 && y2 == 1)
                {
                    anchor = UIAnchor.Stretch;
                }
            }
            return(anchor);
        }
        // Token: 0x060024F6 RID: 9462 RVA: 0x000A123C File Offset: 0x0009F43C
        private void UpdatePosition()
        {
            Vector3 localPosition = this.choiceContainer.localPosition;

            RectTransform.Axis axis = this.movementAxis;
            if (axis != RectTransform.Axis.Horizontal)
            {
                if (axis == RectTransform.Axis.Vertical)
                {
                    localPosition.y = this.currentPosition;
                }
            }
            else
            {
                localPosition.x = this.currentPosition;
            }
            this.choiceContainer.localPosition = localPosition;
        }
    private static int SetSizeWithCurrentAnchors(IntPtr L)
    {
        int result;

        try
        {
            ToLua.CheckArgsCount(L, 3);
            RectTransform      rectTransform = (RectTransform)ToLua.CheckObject(L, 1, typeof(RectTransform));
            RectTransform.Axis axis          = (RectTransform.Axis)((int)ToLua.CheckObject(L, 2, typeof(RectTransform.Axis)));
            float size = (float)LuaDLL.luaL_checknumber(L, 3);
            rectTransform.SetSizeWithCurrentAnchors(axis, size);
            result = 0;
        }
        catch (Exception e)
        {
            result = LuaDLL.toluaL_exception(L, e, null);
        }
        return(result);
    }
Example #29
0
    void UpdateScrollView <T>(List <T> objList, GameObject prefab, Transform parent, RectTransform.Axis axis, Action <GameObject, T> afterPrefabInst) where T : class
    {
        if (parent.transform.childCount > 0)
        {
            foreach (Transform child in parent.transform)
            {
                Destroy(child.gameObject);
            }
        }

        foreach (T obj in objList)
        {
            GameObject instGO = Instantiate(prefab, parent);
            afterPrefabInst?.Invoke(instGO, obj);
        }


        // get width/height of prefab
        float singlePrefabHeightOrWidth = prefab.GetComponent <RectTransform>().rect.height;

        if (axis == RectTransform.Axis.Horizontal)
        {
            singlePrefabHeightOrWidth = prefab.GetComponent <RectTransform>().rect.width;
        }

        // Add on spacing + padding
        HorizontalOrVerticalLayoutGroup group = parent.GetComponent <HorizontalOrVerticalLayoutGroup>();
        float total = singlePrefabHeightOrWidth + +group.spacing;

        // Padding on either top/bottom or right/left
        if (axis == RectTransform.Axis.Horizontal)
        {
            total += group.padding.left + group.padding.right;
        }
        else if (axis == RectTransform.Axis.Vertical)
        {
            total += group.padding.top + group.padding.bottom;
        }

        total = total * objList.Count;

        parent.GetComponent <RectTransform>().SetSizeWithCurrentAnchors(axis, total);
    }
Example #30
0
 private void Init()
 {
     this._rectTrans = base.transform.GetComponent <RectTransform>();
     this._axis      = (this.direction != MovementDirection.Vertical) ? RectTransform.Axis.Horizontal : RectTransform.Axis.Vertical;
     if (this.contentTrans == null)
     {
         this.contentTrans = base.transform.Find("Content").GetComponent <RectTransform>();
         if (this.contentTrans != null)
         {
         }
     }
     this._targetSize = this.contentTrans.rect.height;
     if (this.direction == MovementDirection.Horizontal)
     {
         this._targetSize = this.contentTrans.rect.width;
     }
     this._rectTrans.SetSizeWithCurrentAnchors(this._axis, 0f);
     this._delayTimer = 0f;
     base.transform.GetComponent <CanvasGroup>().alpha = 0f;
 }