【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;
}