简单的实现了下NGUI的上下翻页。有两个接口,分别是上一页和下一页。
用法如下。
如上图,第一个参数为 Page的宽或高,具体由你的滑动组件设定的方向定。
第二个参数为滑动系数,即,滑动了多远就翻页
第三个参数为总页数。
依赖组件。UIScrollView,UICenterOnChild。
脚本和Scroll一起
分页父物体绑上居中脚本。为Scroll的子物体
这个基本功能没问题。但是有一个小缺陷。就是Panel的坐标必须为中心点。如果需要位移需要再加一个父物体。让滑动组件依赖的Panel的相对坐标都为0.
原因是因为我用的坐标去计算的当前页。大家如果有空。可以改为偏移量就能解决这问题。
因为我也用不上这个。这个是写给学员参考的。所以就懒得改了。大家需要的改的话。可以自行修改。
最后。上脚本。
usingUnityEngine;usingSystem.Collections; publicclassYouKeTurnPage:MonoBehaviour{////// 每页宽度(游-客-学-院)///publicfloat pageWidth;////// 翻页力度(游.客.学.院)///publicintEffortsFlip=50;////// 总页数///publicint pageNums=0; ////// 当前所在页///publicint pageIndex{get{return mPageIndex;}}////// 当前所在页///PRivateint mPageIndex=1;privateUIScrollView mScrollView=null;privatefloat nowLocation=0;private bool isDrag=false;private bool isSpringMove=false;privateSpringPanel mSp=null;private bool isHorizontal=true; voidAwake(){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();}voidOnDragStarted(){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);}}}voidPage(float value){isSpringMove=true;isDrag=true;mSp=GetComponent();if(mSp==null)mSp= gameObject.AddComponent();//mSp.enabled = false;Vector3 pos= mSp.target;pos= isHorizontal?newVector3(pos.x+ value, pos.y, pos.z):newVector3(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);}voidSpringPanleMoveEnd(){isSpringMove=false;}void onStoppedMoving(){isDrag=false;SetNowLocation();}voidSetNowLocation(){if(isHorizontal){nowLocation= gameObject.transform.localPosition.x;}else{nowLocation= gameObject.transform.localPosition.y;}}boolSetIndexPage(Vector3 v3){float value= isHorizontal? v3.x: v3.y;//Debug.Log((pageNums - 1) * pageWidth);if(isHorizontal){if(value>0|| value<(pageNums-1)*-pageWidth)returnfalse;}else{if(value<0|| value>(pageNums-1)* pageWidth)returnfalse;}value=Mathf.Abs(value);mPageIndex=(int)(value/ pageWidth)+1;returntrue;}#region 公共接口 游*客*学*院////// 上一页///publicvoidPreviousPage(){if(isHorizontal){if(mPageIndex>1)Page(pageWidth);}else{if(mPageIndex< pageNums)Page(pageWidth);}}////// 下一页///publicvoidNextPage(){if(isHorizontal){if(mPageIndex< pageNums)Page(-pageWidth);}else{if(mPageIndex>1)Page(-pageWidth);}}#endregion}新闻热点
疑难解答