簡單的實現了下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}新聞熱點
疑難解答