unity3d - Unity:在 UI Scroll Rect 中添加不同的滚动速度
问题描述
在 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;
}
}
推荐阅读
- flutter - 颤动 || Firestore:如何从 Firestore 中检索数据并将其显示在 DataTable 中
- javascript - 如何为自定义 lambda 授权器模拟 jsonwebtoken + jwsks-rsa
- wso2 - WSO2,将空的 SOAP 响应转换为空的 JSON
- angular - angular 9 web worker IE
- datatable - python-docx 表格样式不接受样式
- ios - 如何在快速加载 nib 文件时传递数据?
- javascript - 为什么我无法将类应用于靠近复选框的 span 元素?
- php - 当值大于 24 小时时,以分钟为单位计算停机时间从“0”开始
- python - 无论如何将特定的文本数据转换为 csv 格式并在 python 中给出标题名称?
- c++ - 如何在while循环中并行运行我的线程