KGUI是我基于特定的項目需求、基于對UGUI控件的局限,在利用UGUI RectTranform與Image等基本控件,擴展出來一套適合自己項目的GUI。在上一節(jié)中,介紹了【基于Unity-Ray射線,實現(xiàn)UGUI Button功能】。
Button組需求:在實際項目開發(fā)中,我們經(jīng)常會遇到菜單類功能,比如選中某個按鈕,該按鈕處于選中狀態(tài)并且顯示一套UI出來。選擇另一個按鈕,在同一個按鈕又顯示另一套UI等。
????Toggle需求:Toggle則簡單,顧名思義就是開關(guān)的意思。
一、ButtonGroup實現(xiàn)思路
????在【基于Unity-Ray射線,實現(xiàn)UGUI Button功能】中介紹了Button基類(KGUI_ButtonBase),在這里不詳細介紹。ButtonGroup實現(xiàn)比較簡單,重點需要處理以下即可:
1、Button集合
????獲取到哪些Button加入為一組。
????在設(shè)計中,我在Button類添加一個IsButtonGroup屬性,當(dāng)該屬性被選中時,則會激活一個ButtonGroup屬性,運行時,會將該Button加入到Button組中。
????KGUI_Button是繼承自KGUI_ButtonBase類,我對KGUI_Button進行了編輯器封裝。
????ButtonGroup相關(guān)屬性以及初始化方法,用于獲取到同組內(nèi)的所有Button。
????這樣當(dāng)運行時,Button組就會獲取到所有的Button了。
2、Button相關(guān)事件的限制
????當(dāng)Button加入到Button組后,下一步需要做的是當(dāng)選中這個Button組后,所需要對一些Button事件進行處理了。
????當(dāng)Button初始被選中時,在Start執(zhí)行OnClick方法,執(zhí)行選中事件。
????????對OnClick事件進行Button組限制處理,當(dāng)該物體已經(jīng)被選中時,在選中這個是無效的,不在執(zhí)行該OnClick事件。 如果點擊的是另一個,則對前面那一個Button執(zhí)行OnReset()重置方法,并且設(shè)置為當(dāng)前Button為選中狀態(tài)。
????對OnEnter事件進行Button組限制處理,當(dāng)移入到已經(jīng)選中的Button時,則什么都不處理。
????????OnReset()重置,對選中的Button進行一些交互處理以及一些狀態(tài)復(fù)原。
????????對OnExit()事件進行處理,當(dāng)移出選中的Button時,則不進行OnExit()事件處理。
3、 Button組中的添加、移除、設(shè)置
????也可以通過代碼添加/移除指定的Button到Button組中。
????也可通過代碼設(shè)置指定的Button為被選中狀態(tài)。
????Button組的實現(xiàn)就到此結(jié)束了,它比較簡單?;旧弦幌戮涂梢詫懗鰜砹恕?
二、Toggle實現(xiàn)思路
????Toggle則是開關(guān),它的實現(xiàn)也是比較簡單的。同樣它集成自KGUI_ButtonBase。這樣他就支持UGUI、SpriteRender、Object等幾種模式,而不是局限與UGUI的圖片互動。如果對這三種模式不了解的,可以看【基于Unity-Ray射線,實現(xiàn)UGUI Button功能】。
????Toggle其實只需要一個Bool值即可,當(dāng)執(zhí)行OnClick時,設(shè)置bool值就OK了。然后基于這個,在進行一些簡單擴展,比如事件的傳輸或者一些交互互動。
????因為它繼承自KGUI_ButtonBase。所以支持OnClick事件,只需要重寫這個方法即可,設(shè)置IsValue屬性。
????????下面這個方法,則是我對Toggle的一些互動處理。當(dāng)然這個根據(jù)自身情況來進行編寫。
????在對Toggle進行編輯器封裝,得到如下:
三、總結(jié)
????至此Button組與Toggle就講解完畢,這兩個控件實現(xiàn)思路非常簡單,只是基于KGUI_ButonBase進行處理與繼承,從而衍生出這些功能。
?????下一篇講解UGUI RectTransform的坐標(biāo)點問題。了解該坐標(biāo)點后,可實現(xiàn)代碼計算對UI布局、也可實現(xiàn)通過屏幕坐標(biāo)的計算來實現(xiàn)相關(guān)控件的功能。
?????讀者如果有任何的疑問或意見可以直接關(guān)注我的公眾號(Hua灬清)進行詢問,同時每周會推送原創(chuàng)技術(shù)博客。
?