Tim*_*ean 5 parent-child scale unity-game-engine
我的画布中有一个空白,其中有多个对象作为子对象。随着游戏的进行,更多的子级会添加到父级中。我希望父母能够适应孩子的尺寸。
我已经读了很多关于这个主题的文章,但是每次我遇到 ContentSizeFitter 时,不幸的是它对我不起作用,因为它需要一个布局组,而我没有,因为孩子们没有顺序并且很疯狂放置。
我使用的是Unity 2018.3.4f1个人版。
未调整大小的父级:
父级尺寸(红色:新,绿色:旧):
结构:
Canvas
|- Empty
|- Child 1
|- Child 2
|- Child X
Run Code Online (Sandbox Code Playgroud)
我已经编写了一小段代码来完成它的工作,或者按照我想要的方式进行,这对我来说就足够了:
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)
| 归档时间: |
|
| 查看次数: |
11213 次 |
| 最近记录: |