Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(196评价)
价格: 4019.00元
我修改了锚点后,如何动态的修改UI的位置
乱仕佳人发起了问答2023-04-09
1
回复
135
浏览

我修改了锚点后,如何动态的修改UI的位置

所有回复
  • 老师_Trigger 2023-04-10

    如果修改了UI的锚点,需要动态更新它的位置,可以使用RectTransform的pivot和anchoredPosition属性。pivot属性定义UI的中心点,它的值是相对于UI矩形的左下角(0,0)到右上角(1,1)之间的比例坐标。而anchoredPosition定义UI的锚定点与父容器的偏移量。

    修改好锚点后,可以计算出UI需要移动的距离。例如,你把锚点修改为了右上角,那么UI会向左下方移动,移动的距离就是原来锚点与新锚点的距离。
    using UnityEngine;
    using UnityEngine.UI;

    public class UIManager : MonoBehaviour
    {
        [SerializeField] private RectTransform uiRectTrans;
        [SerializeField] private Vector2 newAnchor;

        private Vector2 oldAnchor;

        // 保存原始锚点位置
        private void Awake()
        {
            oldAnchor = uiRectTrans.anchorMax;
        }

        // 当锚点改变时,计算并更新UI的位置
        private void Start()
        {
            if (oldAnchor != newAnchor)
            {
                // 计算UI需要移动的距离,并更新anchoredPosition属性
                Vector2 deltaAnchor = newAnchor - oldAnchor;
                Vector2 deltaPos = new Vector2(deltaAnchor.x * uiRectTrans.rect.width, deltaAnchor.y * uiRectTrans.rect.height);
                uiRectTrans.anchoredPosition += deltaPos;
              
                // 更新pivot属性为新的anchorMin和anchorMax
                uiRectTrans.pivot = newAnchor;
                uiRectTrans.anchorMin = newAnchor;
                uiRectTrans.anchorMax = newAnchor;

                // 保存新的锚点位置
                oldAnchor = newAnchor;
            }
        }
    }
    ```

    在上述代码中,我们定义了一个名为uiRectTrans的RectTransform对象,以及一个新的锚点newAnchor。在Awake方法中,我们保存了原始锚点位置。在Start方法中,我们判断新的锚点是否与原始锚点位置不同,如果不同,则计算UI需要移动的距离,并更新它的anchoredPosition和pivot属性。最后,我们保存新的锚点位置。

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!