using System.Collections; using System.Collections.Generic; using UnityEngine; public class ScalePageScrollView : PageScrollView { #region 字段 // 所有页的object protected GameObject[] items; public float currentScale = 1f; public float otherScale = 0.6f; protected int lastPage; protected 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 ) //若page[i]小于它的位置 则为他的上一页 { lastPage = i; } } for (int i = 0; i < pages.Length; i++) { if (pages[i] > rect.horizontalNormalizedPosition) //若page[i]大于它的位置 则为他的下一页 { nextPage = i; break; //找到第一个就截止 } } if ( nextPage == lastPage ) { return; } float percent = (rect.horizontalNormalizedPosition - pages[lastPage]) / (pages[nextPage] - pages[lastPage]); //5个公告的比例percent 当前所处位置的长度 减去 一段的总长 items[lastPage].transform.localScale = Vector3.Lerp(Vector3.one * currentScale, Vector3.one * otherScale, percent); //上一页的大小 Vector3.one * currentScale 当前的位置,Vector3.one * otherScale 减去的位置 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; } } } }