我不想问这样一个笼统的问题,但我真的很固执,非常希望有人能一路为我提供帮助。情况如下:
我正在为移动应用(纵向模式)制作GUI。我正在使用画布缩放器来缩放参考宽度为1080的画布。这意味着我实际上不知道屏幕空间的高度。
我要创建的是一个菜单,其中包含可变数量的项目。菜单必须固定在底部(具有一定的偏移量)并向上增长。到目前为止,我已经能够使用VerticalLayoutGroup进行管理,并将rect转换锚定在底部。
但是我的最后一个要求是,如果内容变得太大,则会出现一个滚动条。内容的定义太大:是否会扩展(未知)屏幕高度(当然要减去偏移边距)。我希望下图可以更清楚地说明这一点:
我在这里有一个统一的项目:https://ufile.io/v31br
答案 0 :(得分:0)
您是否尝试过scrollView?这里是:https://unity3d.com/learn/tutorials/topics/user-interface-ui/scroll-view
您可以在其中使用垂直布局,并且可能要停用水平滚动并删除水平滑块。
通过脚本可以检查其rectTransform高度并将其与容器的大小进行比较,当达到maxHeight时,您可以开始管理商品的大小
答案 1 :(得分:0)
我假设您使用ScrollRect
组件,因为它是适合您的情况的正确组件。
您可以使用Screen.height
属性检查屏幕高度。
一旦您知道了屏幕的高度,就可以将其与您的矩形高度进行比较,并使用ScrollRect.vertical
属性切换滚动条。您可能必须将ScrollRect.verticalScrollbarVisibility
更改为permanent
,以使其适合您。
答案 2 :(得分:-1)
戴夫发布的答案很接近,但是问题是滚动视图没有展开。我最终通过拉伸滚动视图并在添加项目时手动调整了父级的大小来修复了该问题。我将锚点设置为最大大小并调整sizeDelta
。
public class MenuScript : MonoBehaviour
{
public int MenuItemCount;
public GameObject MenuItemPrefab;
public Transform MenuItemParent;
private RectTransform _rectTransform;
void Start()
{
_rectTransform = GetComponent<RectTransform>();
for (var i = 0; i <= MenuItemCount; i++)
{
GameObject instance = Instantiate(MenuItemPrefab, MenuItemParent, false);
instance.GetComponent<Text>().text = instance.name = "Item " + i;
float size = instance.transform.GetComponent<RectTransform>().sizeDelta.y;
TryExpandBy(size + 10);
}
}
private void TryExpandBy(float size)
{
var deltaY = _rectTransform.sizeDelta.y + size;
if (deltaY > 0) deltaY = 0;
_rectTransform.sizeDelta = new Vector2(_rectTransform.sizeDelta.x, deltaY);
}
}