c# – 在内容大小调整器更新内容的Rect变换后,如何让Unity Scroll Rect滚动到底部?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 在内容大小调整器更新内容的Rect变换后,如何让Unity Scroll Rect滚动到底部?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2066字,纯文字阅读大概需要3分钟。
内容图文
我有一个垂直滚动视图,我想动态添加内容.为了做到这一点,我将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设置为零时没有增加Rect Transform的大小.因此,当最终更新Rect Transform时,滚动到底部为时已晚.
为了说明,假设我的内容是400像素高,滚动条一直在底部.现在我添加一个高100像素的对象.然后我将滚动条发送到底部,但它仍然认为内容是400像素高.然后内容大小更新为500像素,但滚动条下降400像素,因此它只有80%的下降而不是100%.
有两种方法可以解决这个问题.我想要一种强制内容大小Fitter立即更新的方法或者作为事件响应Content Size Fitter更新的方法.
通过研究和实验,我几乎成功地通过将这些行按照这个确切的顺序放在第一个选项中:
Canvas.ForceUpdateCanvases();
scrollRect.content.GetComponent<VerticalLayoutGroup>().CalculateLayoutInputVertical() ;
scrollRect.content.GetComponent<ContentSizeFitter>().SetLayoutVertical() ;
scrollRect.verticalNormalizedPosition = 0 ;
但是,它并没有完全滚动到底部.它总是大约20像素.所以我想知道是否还有一些布局操作我不会强迫发生.也许这是填充物或其他东西.
解决方法:
好的,我相信我已经明白了.在大多数情况下,Canvas.ForceUpdateCanvases();在将verticalNormalizedPosition设置为零之前,您需要做的就是.但就我而言,我添加到内容本身的项目还有一个Vertical Layout Group组件和一个Content Size Fitter组件.所以我必须按以下顺序执行这些步骤:
Canvas.ForceUpdateCanvases();
item.GetComponent<VerticalLayoutGroup>().CalculateLayoutInputVertical() ;
item.GetComponent<ContentSizeFitter>().SetLayoutVertical() ;
scrollRect.content.GetComponent<VerticalLayoutGroup>().CalculateLayoutInputVertical() ;
scrollRect.content.GetComponent<ContentSizeFitter>().SetLayoutVertical() ;
scrollRect.verticalNormalizedPosition = 0 ;
围绕这些方法的文档很少,这有点遗憾.
内容总结
以上是互联网集市为您收集整理的c# – 在内容大小调整器更新内容的Rect变换后,如何让Unity Scroll Rect滚动到底部?全部内容,希望文章能够帮你解决c# – 在内容大小调整器更新内容的Rect变换后,如何让Unity Scroll Rect滚动到底部?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。