Unity:使父级的大小适合子级的大小

Tim*_*ean 5 parent-child scale unity-game-engine

我的画布中有一个空白,其中有多个对象作为子对象。随着游戏的进行,更多的子级会添加到父级中。我希望父母能够适应孩子的尺寸。

我已经读了很多关于这个主题的文章,但是每次我遇到 ContentSizeFitter 时,不幸的是它对我不起作用,因为它需要一个布局组,而我没有,因为孩子们没有顺序并且很疯狂放置。

我使用的是Unity 2018.3.4f1个人版。

未调整大小的父级:

例子

父级尺寸(红色:新,绿色:旧):

实施例2

结构:

Canvas
 |- Empty
     |- Child 1
     |- Child 2
     |- Child X
Run Code Online (Sandbox Code Playgroud)

Tim*_*ean 5

我已经编写了一小段代码来完成它的工作,或者按照我想要的方式进行,这对我来说就足够了:

using UnityEngine;

public class SizeFitter : MonoBehaviour {
    public void CheckForChanges() {
        RectTransform children = transform.GetComponentInChildren<RectTransform>();

        float min_x, max_x, min_y, max_y;
        min_x = max_x = transform.localPosition.x;
        min_y = max_y = transform.localPosition.y;

        foreach (RectTransform child in children) {
            Vector2 scale = child.sizeDelta;
            float temp_min_x, temp_max_x, temp_min_y, temp_max_y;

            temp_min_x = child.localPosition.x - (scale.x / 2);
            temp_max_x = child.localPosition.x + (scale.x / 2);
            temp_min_y = child.localPosition.y - (scale.y / 2);
            temp_max_y = child.localPosition.y + (scale.y / 2);

            if (temp_min_x < min_x)
                min_x = temp_min_x;
            if (temp_max_x > max_x)
                max_x = temp_max_x;

            if (temp_min_y < min_y)
                min_y = temp_min_y;
            if (temp_max_y > max_y)
                max_y = temp_max_y;
        }

        GetComponent<RectTransform>().sizeDelta = new Vector2(max_x - min_x, max_y - min_y);
    }
}
Run Code Online (Sandbox Code Playgroud)