Unity3D的UGUI布局锚点自动绑定关系

  

[MenuItem("CONTEXT/RectTransform/Auto")]
    public static void AutoRectAnior()
    {
        Debug.Log("自适应锚点");
        //获得当前设置UI
        RectTransform rect = Selection.activeGameObject.GetComponent<RectTransform>();
        //获取其父级
        RectTransform parent = rect.parent.GetComponent<RectTransform>();
        RectTransform canvas = rect.GetComponentInParent<Canvas>().GetComponent<RectTransform>();
        if (!rect || ! parent || !canvas)
        {
            Debug.Log("自适应锚点失败,缺少对象!");
            return;
        }
        Bounds rectBounds = RectTransformUtility.CalculateRelativeRectTransformBounds(canvas, rect);//计算src的包围盒
        Bounds parentBounds = RectTransformUtility.CalculateRelativeRectTransformBounds(canvas, parent);//计算tar的包围盒

        float cMinX = 0.5f, cMinY = 0.5f, cMaxX = 0.5f, cMaxY = 0.5f;
        //获取设置UI的宽和高
        float cWidth = rectBounds.size.x; //rect.sizeDelta.x * rect.localScale.x;
        float cHight = rectBounds.size.y;//rect.sizeDelta.y * rect.localScale.y;
        //获取设置UI父级的宽和高
        float pWidth = parentBounds.size.x;//parent.sizeDelta.x * parent.localScale.x;
        float pHight = parentBounds.size.y;//parent.sizeDelta.y * parent.localScale.y;
        //重新计算锚点位置
        cMinX = (pWidth / 2 - (cWidth * rect.pivot.x - rect.anchoredPosition.x)) / pWidth;
        cMinY = (pHight / 2 - (cHight * rect.pivot.y - rect.anchoredPosition.y)) / pHight;
        cMaxX = (pWidth / 2 + (cWidth * (1 - rect.pivot.x) + rect.anchoredPosition.x)) / pWidth;
        cMaxY = (pHight / 2 + (cHight * (1 - rect.pivot.y) + rect.anchoredPosition.y)) / pHight;
        //重新设置UI的锚点位置
        rect.anchorMin = new Vector2(cMinX, cMinY);
        rect.anchorMax = new Vector2(cMaxX, cMaxY);
        //设置UI的相对距离
        rect.offsetMax = new Vector2(0, 0);
        rect.offsetMin = new Vector2(0, 0);

        Debug.Log("自适应锚点成功!");
    }

  上述绑定代码未完善。。。后续完善

转载于:https://www.cnblogs.com/lovewaits/p/7704335.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值