gpt4 book ai didi

c# - 在 Content Size Fitter 更新内容的 Rect Transform 后,如何让 Unity Scroll Rect 滚动到底部?

转载 作者:太空狗 更新时间:2023-10-29 22:56:54 33 4
gpt4 key购买 nike

我有一个要动态添加内容的垂直 ScrollView 。为此,我将一个 Content Size Fitter 组件和一个 Vertical Layout Group 组件附加到 Content 游戏对象,这样每当我将新游戏对象实例化为它的子对象时,它的 Rect Transform 就会自动增长。如果滚动条已经在底部,我想在底部添加新对象后,让滚动条保持在底部。所以我这样做:

    if ( scrollRect.verticalNormalizedPosition == 0 )
{
isAtBottom = true ;
}

ScrollViewItem item = Instantiate( scrollViewItem, scrollRect.content ) ;

if ( isAtBottom )
{
scrollRect.verticalNormalizedPosition = 0 ;
}

但是,这不起作用,因为在我将 verticalNormalizedPosition 设置为零时,新实例化的 ScrollView 项尚未增加 Rect Transform 的大小。因此,当 Rect Transform 最终更新时,滚动到底部为时已晚。

为了说明,假设我的内容有 400 像素高,滚动条一直在底部。现在我向其中添加一个 100 像素高的对象。然后我将滚动条发送到底部,但它仍然认为内容是 400 像素高。然后内容大小更新为 500 像素,但滚动条向下移动了 400 像素,因此它只向下移动了 80% 而不是 100%。

有两种可能的方法来解决这个问题。我想要一种强制 Content Size Fitter 立即更新的方法,或者一种将 Content Size Fitter 更新作为事件响应的方法。

通过研究和实验,我几乎成功地通过将这些行按以下顺序放置在第一个选项中:

Canvas.ForceUpdateCanvases();
scrollRect.content.GetComponent<VerticalLayoutGroup>().CalculateLayoutInputVertical() ;
scrollRect.content.GetComponent<ContentSizeFitter>().SetLayoutVertical() ;
scrollRect.verticalNormalizedPosition = 0 ;

但是,它并没有完全滚动到底部。它总是大约 20 像素远。所以我想知道是否还有一些我不会强制发生的布局操作。也许是填充或其他东西。

最佳答案

好的,我相信我已经弄明白了。在大多数情况下,Canvas.ForceUpdateCanvases(); 是您在将 verticalNormalizedPosition 设置为零之前需要做的所有事情。但就我而言,我添加到内容中的项目本身也有一个垂直布局组组件和一个内容大小调整器组件。所以我必须按以下顺序执行这些步骤:

Canvas.ForceUpdateCanvases();

item.GetComponent<VerticalLayoutGroup>().CalculateLayoutInputVertical() ;
item.GetComponent<ContentSizeFitter>().SetLayoutVertical() ;

scrollRect.content.GetComponent<VerticalLayoutGroup>().CalculateLayoutInputVertical() ;
scrollRect.content.GetComponent<ContentSizeFitter>().SetLayoutVertical() ;

scrollRect.verticalNormalizedPosition = 0 ;

遗憾的是,关于这些方法的文档太少了。

关于c# - 在 Content Size Fitter 更新内容的 Rect Transform 后,如何让 Unity Scroll Rect 滚动到底部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47613015/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com