unity3d - 统一:使父母的大小适合孩子的大小
问题描述
我在有多个对象作为子对象的 Canvas 中有一个空对象。随着游戏的进行,更多的孩子被添加到父母中。我希望父母适合其孩子的大小。
我已经阅读了很多关于这个主题的内容,但是每次我遇到 ContentSizeFitter,不幸的是它对我不起作用,因为它需要一个布局组,而我没有,因为孩子们没有订单并且很疯狂放置。
我正在使用 Unity 2018.3.4f1 个人版。
没有大小的父母:
大小父母(红色:新,绿色:旧):
结构:
Canvas
|- Empty
|- Child 1
|- Child 2
|- Child X
解决方案
我已经编写了一小段代码来完成它的工作,或者按照我想要的方式完成它,这对我来说已经足够了:
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);
}
}
推荐阅读
- python-3.x - 计算python列表中具有相同元素值的对数
- kotlin - 使用 withContext 的协程执行顺序
- javascript - Jest 无法导入 TypeScript 文件
- javascript - 返回重复数字的数组
- ssl - Tomcat 9(Linux 服务器)上的 CA 认证 .cert 文件,tomcat 命令不起作用
- android - 如何从底部导航栏移动到活动 android
- c++ - GLFW 抛出“X11:Vulkan 实例缺少 VK_KHR_xcb_surface 扩展”,即使它位于 ppEnabledExtensionNames 中
- matlab - Matlab 函数可以创建全局变量吗?
- python-3.x - 子弹击中墙壁时游戏崩溃
- business-intelligence - CognosTM1 错误:值上或之前的语法错误