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

2022-08-05  本文已影响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;

        }

上一篇下一篇

猜你喜欢

热点阅读