Unity實(shí)現(xiàn)滑動(dòng)更換界面效果_第1頁
Unity實(shí)現(xiàn)滑動(dòng)更換界面效果_第2頁
Unity實(shí)現(xiàn)滑動(dòng)更換界面效果_第3頁
Unity實(shí)現(xiàn)滑動(dòng)更換界面效果_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第Unity實(shí)現(xiàn)滑動(dòng)更換界面效果在做2048這個(gè)游戲時(shí),因?yàn)椴藛雾撁孢€能查看游戲規(guī)則,而這些規(guī)則又不在同一個(gè)頁上,所以需要滑動(dòng)頁面實(shí)現(xiàn)頁面切換,但是僅僅使用unity提供的組件做出的效果僅有一個(gè)切換的意思,交互感很差,所以在組件的基礎(chǔ)上又寫了一個(gè)控制頁面切換的類。而界面切換就是實(shí)現(xiàn)一個(gè)滾動(dòng)的視圖。

在unity編輯器中實(shí)現(xiàn)滾動(dòng)視圖的基本操作:需要用ScrollRect組件

首先可以看看官方用戶手冊中關(guān)于ScrollRect組件的講解,說的很明白。最精辟的描述就是用于使子RectTransform滾動(dòng)的組件。

滾動(dòng)視圖中的重要元素包括視口、滾動(dòng)內(nèi)容以及可選的一個(gè)或兩個(gè)滾動(dòng)條。

ScrollView是滾動(dòng)視圖,Viewport是視口,Content是滾動(dòng)內(nèi)容的集合(在其他地方可能就是一張大圖),這些都是panel。Viewport會顯示Content的一部分內(nèi)容。

注意ScrollView、Viewport的大小都是和畫布一樣的,而Content大小應(yīng)該是其下所有內(nèi)容大小的和,如下圖。

下面是Content中對應(yīng)的內(nèi)容??吹綀D也應(yīng)該知道實(shí)現(xiàn)滑動(dòng)更換界面功能的原理了,正是把該顯示的放在視口下。

ScrollRect組件的配置:

為ScrollView添加ScrollRect組件,并把Viewport拖給ScrollRect組件的Viewport屬性,再把Content拖給ScrollRect組件的Content屬性,滾動(dòng)條看需要加吧,我加了一個(gè)水平滾動(dòng)條,滾動(dòng)條并不用加以過多的控制,unity已經(jīng)把滾動(dòng)條和ScrollRect的組合使用做的很好了。其他屬性的配置在官方手冊中講的很清楚。

有一個(gè)節(jié)省Content性能的組件——Mask:

因?yàn)槲覀冎荒芸吹揭暱谙碌膬?nèi)容,由于Content可能有很多界面組成,所以我們可以采取遮罩的方式來不渲染我們看不到的東西,也就是只渲染視口,來提高效率,unity給我們提供了這樣一個(gè)組件幫助我們實(shí)現(xiàn)這個(gè)功能:

這個(gè)組件當(dāng)然要給到視口上,可以看到除了一開始在視口上的菜單界面,其余規(guī)則界面都沒有渲染。

這個(gè)組件在全屏的切換時(shí)確實(shí)只能節(jié)省性能,但是在某一部分實(shí)現(xiàn)滑動(dòng)更換界面時(shí)卻可以遮住Content中不應(yīng)該顯示的部分,很方便,也很必要。

到此,unity中可以幫我們的最大限度就到這了,現(xiàn)在運(yùn)行會發(fā)現(xiàn)確實(shí)可以移動(dòng),但是到達(dá)邊界是會出現(xiàn)瑕疵、卡動(dòng),并且滑到一半不滑了也不會自動(dòng)彈回,所以我們?nèi)孕枰约壕帉懩_本給與更好的控制。

用代碼控制靈敏度、彈回速度。。。:

需要了解的:

當(dāng)然少不了用到ScrollRect組件對應(yīng)的API:ScrollRect,此外,因?yàn)橐约簩懘a控制滑動(dòng)界面,必須要用到Event事件的實(shí)現(xiàn)接口,這里我用的是拖拽類的IBeginDragHandler,IEndDragHandler。

基本的原理:

就是記錄每一次開始拖拽到結(jié)束拖拽的距離,求出現(xiàn)在的位置,和每個(gè)界面的位置比較,顯示最近的界面即可。雖然這看起來很簡單,但是將交互的效果提升了1000000000000000000000000個(gè)檔次。

值得注意的是,盡管在代碼中注釋了很多次,但是還是提一下,就是在ScrollRect中有horizontalNormalizedPosition屬性,用來記錄水平滾動(dòng)位置,以0到1之間的值表示,0表示位于左側(cè)。所以我們在記錄每個(gè)界面的位置時(shí),應(yīng)當(dāng)記錄每個(gè)界面的臨界比例,且在0-1之間,比如一共有四頁,那么第一頁和第二頁之間的臨界應(yīng)在0.333333.

代碼實(shí)現(xiàn):

代碼中用到的API均可在ScrollRect找到,不難理解。并且基本所有地方都加了注釋。

usingUnityEngine;

usingSystem.Collections;

usingUnityEngine.UI;

usingSystem.Collections.Generic;

usingUnityEngine.EventSystems;

usingSystem;

publicclassPageView:MonoBehaviour,IBeginDragHandler,IEndDragHandler

//1)Smooting表示停止滑動(dòng)后,當(dāng)前頁碼歸正的速率

//2)sensitivity滑動(dòng)的敏感度,如果數(shù)值過大會導(dǎo)致翻多頁

//3)OnPageChanged當(dāng)前頁碼改變時(shí)回調(diào)

//4)方法pageTo直接跳轉(zhuǎn)到某一頁

//注意點(diǎn):ScrollView下的Content的長度是每頁的寬度*頁數(shù),每頁的寬度與ScrollView的寬度相同

privateScrollRectrect;//滑動(dòng)組件

privatefloattargethorizontal=0;//滑動(dòng)的起始坐標(biāo)

privateboolisDrag=false;//是否拖拽結(jié)束

privateListfloatposList=newListfloat//求出每頁的臨界值(0-1)

//privateintcurrentPageIndex=-1;//記錄當(dāng)前是第幾頁,頁索引從0開始,這里不需要顯示,有需求可以自己顯示

//publicActionintOnPageChanged;

privateboolstopMove=true;//是否停止移動(dòng)

publicfloatsmooting=4;//滑動(dòng)速度

publi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論