美文网首页
【unity】一个图表 或者图片的缩放后不对的问题饶了一大圈 最

【unity】一个图表 或者图片的缩放后不对的问题饶了一大圈 最

作者: 吉凶以情迁 | 来源:发表于2022-08-05 11:10 被阅读0次

    一个图表 或者图片的缩放问题


    33

    如上图所示 leftbottom是一个父容器 固定设置了距离左边有10个距离
    然后我把图表插入到这个左下角,缩放图表自身 就会发现图表并不会按我想的摆放,他距离底部更远了,


    333

    我这个问题之前那个朋友的解决思路是直接缩放父容器 这样这个图表就会一直靠左下角保持固定10

    ,但是 同时插入多个到左下角,如果约束宽度不一致,他们都是一个父容器显然是行不通的,则代表需要每一个给定一个父容器,然后我动态给了他们 一个父容器,但是这位置摆放还是不对。
    昨天调节了很久还是不行

    那个锚点,我目前只能 我只能解决一个的摆放和同时缩放问题


    333

    经过大佬的分析 我这个分明搞错了方向,解决问题还是得从缩放自己来解决,问题就是锚点问题
    原因是缩放后位置不对实际上锚点不对其实修改锚点就可以解决,但是被锁死导致的,那么 解决锁死问题 就问题解决了,然后只勾选hor group的 use child scale 发现 孩子的锚点依然是可以修改的,然后测试改成一致的,就解决了这个问题。
    不管 是左下角还是左上角 或者右下角都可以解决这个问题。

    然后 设置自己的锚点和父亲锚点一致,比如左下角摆放则让孩子也同样左下角摆放,这样就可以做到和屏幕左下距离是一样的。

    image.png

    需要注意的是 child alignment需要调整好,不然还是会有点问题。

    完整代码

    
    
            RectTransform rectTransform = newGameObject.GetComponent<RectTransform>();
            newGameObject.transform.parent = parent.transform;
            rectTransform.anchoredPosition3D = Vector3.zero;
            if (view.width > 0 || view.height > 0)
            {
                if (view.getType() == IDataType.web)
                {
    
                    if (view.scale > 0)
                    {
                        newGameObject.transform.localScale = new Vector3(view.scale, view.scale, view.scale);
                    }
    
                    rectTransform.sizeDelta = new Vector2(view.width > 0 ? view.width : rectTransform.sizeDelta.x, view.height > 0 ? view.height : rectTransform.sizeDelta.y);
    
    
    
                }
                else
                {
                    // 如果ratio=-1,则代表适用宽度,直接设置 宽高而非缩放到指定宽度
                    if (view.scale == -1)
                    {
                        rectTransform.sizeDelta = new Vector2(view.width > 0 ? view.width : rectTransform.sizeDelta.x, view.height > 0 ? view.height : rectTransform.sizeDelta.y);
                        parent.transform.localScale = Vector3.one;
                    }
                    else
                    if (view.width != 0 && view.height == 0) //基于宽度缩放
                    {
    
                        float scaleX = view.width / rectTransform.rect.width;
                        newGameObject.transform.localScale = new Vector3(scaleX, scaleX, scaleX);
                    }
                    else
                    if (view.width == 0 && view.height != 0)//基于高度缩放
                    {
    
                        float scaleY = view.height / rectTransform.rect.height;
                        newGameObject.transform.localScale = new Vector3(scaleY, scaleY, scaleY);
                    }
    
                    else
                    {
    
    
                        float scaleX = view.width / rectTransform.rect.width;
                        float scaleY = view.height / rectTransform.rect.height;
                        newGameObject.transform.localScale = new Vector3(scaleX, scaleY, 1);
    
    
                    }
                }
                rectTransform.pivot = parent.GetComponent<RectTransform>().pivot;
    
            }
            else
            {
    
                //直接设置比例
    
                if (view.scale > 0)
                {
                    newGameObject.transform.localScale = new Vector3(view.scale, view.scale, view.scale);
                }
                else //使用默认宽高约束 如果 比我设置的最大比例还要大,就不缩放了, 原比例默认
                {
                    float scaleratio = _baseScaleWidth >= rectTransform.rect.width ? 1 : _baseScaleWidth / rectTransform.rect.width;
                    newGameObject.transform.localScale = new Vector3(scaleratio, scaleratio, scaleratio);
                }
                rectTransform.pivot = parent.GetComponent<RectTransform>().pivot;
    
            }
    
    

    相关文章

      网友评论

          本文标题:【unity】一个图表 或者图片的缩放后不对的问题饶了一大圈 最

          本文链接:https://www.haomeiwen.com/subject/fnxpwrtx.html