NGUI实现翻页,上下页功能
简单的实现了下NGUI的上下翻页。有两个接口,分别是上一页和下一页。
用法如下。
如上图,第一个参数为 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