【问题标题】:Unity: How to calculate scrollbar value needed to move the content with known value?Unity:如何计算移动具有已知值的内容所需的滚动条值?
【发布时间】:2017-12-13 10:26:12
【问题描述】:

我有一个动态的方法来增加内容大小,具体取决于内容的数量。 随着内容的增加,滚动条的大小会减小,并且将内容移动固定数字(例如向右 100)所需的滚动条值的值也会发生变化(减小)。 我可以有一种方法可以将内容滚动一个固定的数字,而不依赖于滚动条的大小和值(或者可以得到每次需要的值的等式)吗?

编辑: 我知道如何通过更改 Scrollbar.Value(从 0 到 1)来滚动。但我需要滚动一个固定数字(例如:100)而不是比率(0-1)

【问题讨论】:

标签: user-interface unity3d scrollbar


【解决方案1】:

Scrollbar 只是一个控件,供用户滚动并在幕后操纵ScrollRect.horizontalNormalizedPositionScrollRect.verticalNormalizedPosition

如果您必须使用代码手动设置值,则不要使用scrollbar。您直接处理 scrollrect 的标准化位置(范围为 0-1)。

您可以通过计算ScrollRect 的总大小,然后找到所需滚动值的比率来按比例更改此值。像这样的:

float totalWidth = // find total width of scroll rect transform.
float targetValue = 100;
float targetPercentage = targetValue/totalWidth;

scrollRect.horizontalNormalizedPosition = targetPercentage;

现在如果您的 scrollrect500 并且您想滚动到 100

您的目标百分比将是100/500 (= 0.2f)

我希望你能弄清楚其余的。

【讨论】:

  • 感谢您的回答。 1- scrollRect.horizo​​ntalNormalizedPosition 和 scrollbar.value 给了我相同的结果。 2-您的解决方案有效,但有两个问题: *总宽度是内容的宽度,而不是滚动矩形,因为我正在更改内容的大小而不是滚动矩形/ *目标百分比没有给我想要的值。 3-当我尝试您的解决方案时,我通过将内容转换的 x 位置更改为所需的值(加或减 100)找出了一个最简单的解决方案
  • 显然!如果您的目标是内容,那么您可以尝试计算内容矩形大小。正如我所说,scroll-rect 的归一化位置是最好的方法,因为它毕竟改变了场景后面内容的位置。
  • 使解决方案无法完美运行的唯一原因是比率。可能有另一种计算方法。
  • 如果您的内容不是从 scrollrect 的顶部/左侧开始,那么您还必须考虑偏移量。如果我能看到您正在处理的实际 UI 设置,我可以提供更多帮助:)
  • 它在中间,你应该换到左上角
猜你喜欢
  • 2011-08-02
  • 2021-11-08
  • 2019-10-25
  • 2019-11-20
  • 1970-01-01
  • 2012-12-28
相关资源
最近更新 更多