KGUI Button組、Toggle實現(xiàn)思路

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ù)博客。

?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Canvas 渲染順序 遵循刷油漆規(guī)則(畫家算法) 依次由Render CameraDepth值、Sorting ...
    沉麟閱讀 1,653評論 0 0
  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的。 ??事件,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,686評論 1 11
  • 一、簡介 以前一直以為Unity編輯器開發(fā)很復(fù)雜,很難。但是自學(xué)了一天之后,慢慢的將一些腳本用Editor來進行封...
    Hua灬清閱讀 16,055評論 0 8
  • 微服務(wù)是指使用一套小服務(wù)來開發(fā)單個應(yīng)用的方式,每個服務(wù)運行在獨立的進程里,一般采用輕量級的通訊機制互聯(lián),并且它們可...
    Anson_hyq閱讀 585評論 1 0
  • 周易的核心是“天人合一”它的深刻內(nèi)涵又是什么呢?這恐怕真正領(lǐng)悟的人并不是太多。 下面就從《周易》的四個方面來談?wù)勌?..
    禹音閱讀 353評論 0 0

友情鏈接更多精彩內(nèi)容