示例#1
0
        /// <summary>
        /// Set the fixed size component of the transform.
        /// </summary>
        public void SetFixedSizeFromEdge(RectTransformState state, float size, RectTransformEdge edge, float offset = 0f)
        {
            switch (edge)
            {
            case RectTransformEdge.Left:
                state.Transform.offsetMax = new Vector2(size + offset, 0);
                state.Transform.offsetMin = new Vector2(offset, 0);
                break;

            case RectTransformEdge.Right:
                state.Transform.offsetMin = new Vector2(-size - offset, 0);
                state.Transform.offsetMax = new Vector2(-offset, 0);
                break;

            case RectTransformEdge.Top:
                state.Transform.offsetMin = new Vector2(0, -size - offset);
                state.Transform.offsetMax = new Vector2(0, -offset);
                break;

            case RectTransformEdge.Bottom:
                state.Transform.offsetMax = new Vector2(0, size + offset);
                state.Transform.offsetMin = new Vector2(0, offset);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(edge), edge, null);
            }
        }
示例#2
0
        public void SetAnchorPreset(RectTransformState state, RectTransformAnchorPresetX x, RectTransformAnchorPresetY y)
        {
            Vector3 yv;

            switch (y)
            {
            case RectTransformAnchorPresetY.Top:
                yv = new Vector3(1, 1, 0.5f);
                break;

            case RectTransformAnchorPresetY.Middle:
                yv = new Vector3(0.5f, 0.5f, 0.5f);
                break;

            case RectTransformAnchorPresetY.Bottom:
                yv = new Vector3(0, 0, 0.5f);
                break;

            case RectTransformAnchorPresetY.Stretch:
                yv = new Vector3(0, 1, 0.5f);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(y), y, null);
            }

            Vector3 xv;

            switch (x)
            {
            case RectTransformAnchorPresetX.Left:
                xv = new Vector3(0, 0, 0.5f);
                break;

            case RectTransformAnchorPresetX.Center:
                xv = new Vector3(0.5f, 0.5f, 0.5f);
                break;

            case RectTransformAnchorPresetX.Right:
                xv = new Vector3(1, 1, 0.5f);
                break;

            case RectTransformAnchorPresetX.Stretch:
                xv = new Vector3(0, 1, 0.5f);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(x), x, null);
            }

            state.Transform.anchorMin = new Vector2(yv[0], xv[0]);
            state.Transform.anchorMax = new Vector2(yv[1], xv[1]);
            state.Transform.pivot     = new Vector2(yv[2], xv[2]);
        }
示例#3
0
        /// <summary>
        /// Get the calculated size of a component.
        /// </summary>
        public Vector2 GetSize(RectTransformState state)
        {
            var widthFactor  = state.Transform.anchorMax.x - state.Transform.anchorMin.x;
            var heightFactor = state.Transform.anchorMax.y - state.Transform.anchorMin.y;
            var width        = 0f;
            var height       = 0f;

            // Try to get parent?
            if (state.HasParent)
            {
                width  = state.Parent.rect.width * widthFactor;
                height = state.Parent.rect.height * heightFactor;
            }

            var y = height + state.Transform.offsetMax.y - state.Transform.offsetMin.y;
            var x = width + state.Transform.offsetMax.x - state.Transform.offsetMin.x;

            return(new Vector2(x, y));
        }
示例#4
0
 /// <summary>
 /// Move the pivot of the target component state to the given absolute offset from it's bottom left anchor.
 /// </summary>
 public void Move(RectTransformState state, Vector2 value)
 {
     state.Transform.anchoredPosition = value;
 }
示例#5
0
 /// <summary>
 /// Recall the size is defined by the offsetMin -> offsetMax from the anchor point.
 /// This function therefore moves and sets the absolute size of the object; you can't
 /// just set one and then the other.
 ///
 /// As a side effect, the transform is reset to bottom left for this operation.
 /// Note that sizes are absolute.
 /// </summary>
 public void MoveAndResize(RectTransformState state, Vector2 size, Vector2 center)
 {
     SetAnchorPreset(state, RectTransformAnchorPresetX.Left, RectTransformAnchorPresetY.Bottom);
     state.Transform.offsetMin = center - size / 2;
     state.Transform.offsetMax = center + size / 2;
 }