接上一篇博客 这篇博客我们继承上一篇写的脚本
给我们的分页滚动天添加新的功能
首先给出demo
可以看到这个效果还是比较棒的 大家忽略里边的文字 是我乱写的
这个实在上一篇博客的基础上 继承上一篇博客的脚本
这是我专门开设的一个专栏 地址
上边的专栏 是讲所有关于分页滚动的开发和优化的
大家有兴趣 可以整体的看一下
开发过程
在上一个的基础上 我们只需要使用面向对象的特性来添加新的功能即可
这样的好处有很多 一是简洁明了,二是可以避免很多问题(不去修改原来成型的代码)
public class ScalePageView : PageScrollview
{
//继承上一个类来扩展新功能(二)
[Header("缩放参数")]
public float currentScale = 1f;
public float otherScale = 0.6f;
public int lastpage;//上一页
public int nextpage;//下一页
public GameObject[] items;
protected override void Start()
{
base.Start();
items = new GameObject[pagecount];
for(int i = 0; i < pagecount; i++)
{
items[i] = GameObject.Find("Content").transform.GetChild(i).gameObject;//获得子物体
}
}
protected override void Update()
{
base.Update();
ListenScale();
}
public void ListenScale()//监听scale
{
//找到上一页和下一页
for(int i = pages.Length-1; i >=0 ; i--)
{
if (pages[i] <= rect.horizontalNormalizedPosition)
{
lastpage = i;
break;
}
}
for (int i = 0; i < pages.Length; i++)
{
if (pages[i] >= rect.horizontalNormalizedPosition)
{
nextpage = i;
break;
}
}
float percent = Mathf.Abs((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&&i!=currentindex)
{
items[i].transform.localScale = Vector3.one * otherScale;
}
}
}
}
其中实现尺寸的变化是使用插值的方法 打击啊可以去自己了解
这个专栏我还会持续更新 如果大家有兴趣 可以关注我
有问题也可以联系我 主页有我的联系方式(知无不答)