using UnityEngine; public class ScalePageScrollView : PageScrollView { #region 字段 // 所有页的Object protected GameObject[] items; public float currentScale = 1f; public float otherScale = 0.6f; public int lastPage; public int nextPage; #endregion #region Unity回调 protected override void Start() { base.Start(); items = new GameObject[pageCount]; // 初始化所有的GameObject for (int i = 0; i < pageCount; i++) { items[i] = transform.Find("Viewport/Content").GetChild(i).gameObject; } } protected override void Update() { base.Update(); ListenerScale(); } #endregion // 监听scale public void ListenerScale() { // 找到上一页 和 下一页 for (int i = 0; i < pages.Length; i++) { if ( pages[i] <= rect.horizontalNormalizedPosition ) { lastPage = i; } } for (int i = 0; i < pages.Length; i++) { if (pages[i] > rect.horizontalNormalizedPosition) { nextPage = i; break; } } if ( nextPage == lastPage ) { return; } float percent = (rect.horizontalNormalizedPosition - pages[lastPage]) / ( pages[nextPage] - pages[lastPage] ); items[lastPage].transform.localScale = Vector3.Lerp(Vector3.one * currentScale, Vector3.one * otherScale, percent); items[nextPage].transform.localScale = Vector3.Lerp(Vector3.one * currentScale, Vector3.one * otherScale, 1 - percent); for (int i = 0; i < items.Length; i++) { if (i != lastPage && i != nextPage) { items[i].transform.localScale = Vector3.one * otherScale; } } } }