在unity中实现分页滚动的大小的缩放功能(UGUI)(2)

接上一篇博客 这篇博客我们继承上一篇写的脚本
给我们的分页滚动天添加新的功能
首先给出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;
            }
        }

    }

}

其中实现尺寸的变化是使用插值的方法 打击啊可以去自己了解

这个专栏我还会持续更新 如果大家有兴趣 可以关注我
有问题也可以联系我 主页有我的联系方式(知无不答)

猜你喜欢

转载自blog.csdn.net/weixin_44302602/article/details/108049456