在 Unity 中,我创建了一个 UI 滚动矩形对象。该对象有两个子对象,一个具有不同按钮的按钮处理程序和一个背景。
使用它,按钮和背景都以相同的速度滚动。我希望按钮比背景滚动得更快,从而为滚动创建深度效果。
我在 Objects 或 Scroll Rect 中找不到任何选项。有任何想法吗?
这将需要一点点脚本。我认为最好的方法包括以下步骤:
a) 对于每个按钮,添加一个记住其起始位置的组件。
b)在父级中获取一个滚动矩形实例
c) 使用它来获取 ScrollBar 的实例
d) 滚动条具有 onValueChanged(float) 回调,您可以绑定到,以了解滚动位置何时更改(以避免在更新中进行检查)
e) 每次滚动条移动时(无论用户是使用滚动条还是使用另一种滚动方式,这都会起作用,因为 scrollrect 将移动滚动条,无论如何都会触发事件),你会得到一个回调当前滚动条位置将等于规范化的滚动矩形位置(0.1)
f) 使用该值来偏移您的本地位置(一些值 *parallaxVector2),这应该会给您一个不错的廉价深度效果
这是一个示例实现
public class ScrolleRectDepthButton : MonoBehaviour
{
RectTransform content; // we'll grab it for size reference
RectTransform myRect;
public float parallaxAmount = 0.05f;
public Vector2 startPosition;
void Start()
{
myRect = GetComponent<RectTransform>();
startPosition = myRect.anchoredPosition;
ScrollRect scrollRect = GetComponentInParent<ScrollRect>();
content = scrollRect.content;
Scrollbar scrollbar = scrollRect.verticalScrollbar;
scrollbar.onValueChanged.AddListener(OnScrollbarMoved);
}
void OnScrollbarMoved(float f)
{
myRect.anchoredPosition = startPosition - (1 - f) * parallaxAmount * content.rect.height * Vector2.up;
}
}