前言
最近遇到了这样的需求:滑动列表自动定位到第一个未领取的奖励,翻译一下其实就是ScrollView的自动定位问题。
思路
ScrollView的滑动、定位问题一般都与ScrollRect.normalizedPosition这个字段有关,这个字段描述了ScrollView组件下Content(内容)和Viewport(视窗)的相对位置,滑动、定位问题本质上就是寻找新的normalizedPosition的问题。
Unity官方对这个字段的描述:
The scroll position as a Vector2 between (0,0) and (1,1) with (0,0) being the lower left corner.
normalizedPosition的计算方法:ScrollRect.normalizedPosition+偏差量(根据目标Item位置和当前viewport位置进行计算,详细见代码)
代码
using UnityEngine;
using UnityEngine.UI;
public class ScrollEx : MonoBehaviour
{
private ScrollRect scrollRect;
private RectTransform viewport;
private RectTransform content;
[SerializeField][Header("要定位到的目标物体")]
private RectTransform targetItem;
void Start() {
if (scrollRect == null) scrollRect = this.GetComponent