NGUI实现翻页,上下页功能

 

简单的实现了下NGUI的上下翻页。有两个接口,分别是上一页和下一页。

用法如下。

111

如上图,第一个参数为 Page的宽或高,具体由你的滑动组件设定的方向定。

第二个参数为滑动系数,即,滑动了多远就翻页

第三个参数为总页数。

依赖组件。UIScrollView,UICenterOnChild。

脚本和Scroll一起

分页父物体绑上居中脚本。为Scroll的子物体

这个基本功能没问题。但是有一个小缺陷。就是Panel的坐标必须为中心点。如果需要位移需要再加一个父物体。让滑动组件依赖的Panel的相对坐标都为0.

原因是因为我用的坐标去计算的当前页。大家如果有空。可以改为偏移量就能解决这问题。

因为我也用不上这个。这个是写给学员参考的。所以就懒得改了。大家需要的改的话。可以自行修改。

最后。上脚本。

/*
 * 游客学院:专业游戏开发在线教学平台,提供前端,后端,策划教学视频
 * 脚本名(ScriptName):    YouKeTurnPage.cs
 * 作者(Author):           小宝
 * 官网(Url):              http://www.youke.pro
 */
using UnityEngine;
using System.Collections;
 
public class YouKeTurnPage : MonoBehaviour 
{
    /// 
    /// 每页宽度(游-客-学-院)
    /// 
    public float pageWidth;
    /// 
    /// 翻页力度(游.客.学.院)
    /// 
    public int EffortsFlip = 50;
    /// 
    /// 总页数
    /// 
    public int pageNums = 0;
 
    /// 
    /// 当前所在页
    /// 
    public int pageIndex
    {
        get
        {
            return mPageIndex;
        }
    }
    /// 
    /// 当前所在页
    /// 
    private int mPageIndex = 1;
    private UIScrollView mScrollView = null;
    private float nowLocation = 0;
    private bool isDrag = false;
    private bool isSpringMove = false;
    private SpringPanel mSp = null;
    private bool isHorizontal = true;
 
    void Awake()
    {
        mScrollView = gameObject.GetComponent();
        if(mScrollView == null)
        {
            mScrollView = gameObject.AddComponent();
        }
        mScrollView.onDragStarted = OnDragStarted;        
        mScrollView.onMomentumMove = onMomentumMove;
        mScrollView.onStoppedMoving = onStoppedMoving;
        if (mScrollView.movement == UIScrollView.Movement.Horizontal)
        {
            isHorizontal = true;
        }
        else
        {
            isHorizontal = false;
        }
        onStoppedMoving();
    }
    void OnDragStarted()
    {
        isDrag = false;
        SetNowLocation();
    }
    void onMomentumMove()
    {
        if (isDrag) return;
        Vector3 v3 = transform.localPosition;
        float value = 0;
        if (isHorizontal)
        {
            value = nowLocation - v3.x;
            if (Mathf.Abs(value) < EffortsFlip) return;
            if (value > 0)
            {
                if (mPageIndex < pageNums) Page(-pageWidth);
            }
            else
            {
                if (mPageIndex > 1)  Page(pageWidth);
            }
        }
        else
        {
            value = nowLocation - v3.y;
            if (Mathf.Abs(value) < EffortsFlip) return;
            if (value > 0)
            {
                if (mPageIndex > 1) Page(-pageWidth);
            }
            else
            {
                if (mPageIndex < pageNums) Page(pageWidth);
            }
        }
    }
    void Page(float value)
    {
        isSpringMove = true;
        isDrag = true;
        mSp = GetComponent();
        if (mSp == null)mSp = gameObject.AddComponent();
        //mSp.enabled = false;
        Vector3 pos = mSp.target;
        pos = isHorizontal ? new Vector3(pos.x + value, pos.y, pos.z) : new Vector3(pos.x, pos.y + value, pos.z);
        if (!SetIndexPage(pos)) return;
        SpringPanel.Begin(gameObject, pos, 13f).strength = 8f;
        mSp.onFinished = SpringPanleMoveEnd;
        Debug.Log("page index="+mPageIndex);
    }
    void SpringPanleMoveEnd()
    {
        isSpringMove = false;
    }
    void onStoppedMoving()
    {
        isDrag = false;
        SetNowLocation();
    }
    void SetNowLocation()
    {
        if (isHorizontal)
        {
            nowLocation = gameObject.transform.localPosition.x;
        }
        else
        {
            nowLocation = gameObject.transform.localPosition.y;
        }
    }
    bool SetIndexPage(Vector3 v3)
    {
        float value = isHorizontal ? v3.x : v3.y;
        //Debug.Log((pageNums - 1) * pageWidth);
        if(isHorizontal)
        {
            if (value > 0 || value < (pageNums - 1) * -pageWidth) return false;
        }
        else
        {
            if (value < 0 || value > (pageNums - 1) * pageWidth) return false;
        }
        value = Mathf.Abs(value);
        mPageIndex = (int)(value / pageWidth) + 1;
        return true;
    }
    #region 公共接口 游*客*学*院
    /// 
    /// 上一页
    /// 
    public void PreviousPage()
    {
        if (isHorizontal)
        {
            if (mPageIndex > 1) Page(pageWidth);
        }
        else
        {
            if (mPageIndex < pageNums) Page(pageWidth);
        }
    }
    /// 
    /// 下一页
    /// 
    public void NextPage()
    {
        if (isHorizontal)
        {
             if (mPageIndex < pageNums) Page(-pageWidth);
        }
        else
        {
            if (mPageIndex > 1) Page(-pageWidth);
        }
    }
    #endregion
}

 

最后。工程下载地址

 http://www.youkexueyuan.com/exp_show/1162.html

本文链接:

https://www.bobsong.net/1120.html
1 + 2 =
快来做第一个评论的人吧~