unity中Toggle組件的使用心得
使用unity也有很長(zhǎng)一段時(shí)間了,個(gè)人覺(jué)得unity這款引擎學(xué)習(xí)起來(lái)還是比較容易的,但是對(duì)于一些初學(xué)者來(lái)說(shuō),可能有些困難。我初學(xué)unity時(shí)也遇到很多問(wèn)題,盡管現(xiàn)在看起來(lái)很簡(jiǎn)單,但是對(duì)于那個(gè)時(shí)候的我來(lái)說(shuō)還是有難度的。我猜測(cè)一定有和我一樣遇到同樣問(wèn)題的unity學(xué)習(xí)者,今天寫(xiě)下我對(duì)unity組件中的一種組件---Toggle的心得。
Toggle(開(kāi)關(guān))是Unity中UGUI里面的一個(gè)組件。一般用于做單選開(kāi)關(guān)。比如寫(xiě)一個(gè)飛機(jī)大戰(zhàn)的游戲,我們選擇戰(zhàn)機(jī)就可以用到這個(gè)組件。那么我今天講的不是一個(gè)toggle,而是多個(gè)toggle在一起的情況,那么我們就需要用到ToggleGroup(開(kāi)關(guān)組)這個(gè)組件了。效果圖如下:

在unity里面制作開(kāi)關(guān)組還是很簡(jiǎn)單的,我這里就不細(xì)說(shuō)。我要說(shuō)的是怎樣通過(guò)腳本根據(jù)isOn的值來(lái)選擇對(duì)應(yīng)的飛機(jī)。大家都知道toggle組件有個(gè)isOn的屬性,勾選上表示開(kāi)關(guān)組當(dāng)前啟用的是這個(gè)toggle,沒(méi)啟用的都是沒(méi)有勾選isOn的。如圖:


這是最終效果圖。但是真的這么簡(jiǎn)單嗎?這里面還是有點(diǎn)東西的!
是不是有朋友和我一樣,剛開(kāi)始都是寫(xiě)個(gè)腳本,然后注冊(cè)事件,然后點(diǎn)擊運(yùn)行。。。。。一頓操作猛如虎,一看結(jié)果0-5!如圖:



你會(huì)發(fā)現(xiàn)和自己想的完全不一樣!為什么我只選一個(gè),開(kāi)關(guān)顯示的圖片沒(méi)問(wèn)題,但是代碼那邊打印的卻不一樣?一次打印兩個(gè),這就很難受!初學(xué)unity的時(shí)候,我也被這個(gè)弄的很難受,搞了一下午的時(shí)間,百度上面也沒(méi)找到,不知道是不是我關(guān)鍵字沒(méi)打?qū)€是其他的原因,反正都沒(méi)弄好,直到我搗鼓了半天過(guò)后,發(fā)現(xiàn)新大陸似的看到了一個(gè)東西:OnValueChanged.
然后我就想:是不是isOn需要匹配unity自帶的函數(shù)?我就寫(xiě)了一個(gè)OnValueChanged();然后注冊(cè)事件的時(shí)候發(fā)現(xiàn)居然有兩個(gè)這樣的函數(shù):

最終經(jīng)過(guò)我的調(diào)試,得出初步結(jié)論:toggle開(kāi)關(guān)組使用代碼通過(guò)isOn屬性判斷選擇的開(kāi)關(guān)到底是那個(gè)的時(shí)候,需要寫(xiě)上特定的函數(shù)OnValueChanged(),并且注冊(cè)事件時(shí)要選擇上面的OnValueChanged()函數(shù)。因?yàn)槲覀円鶕?jù)isOn的情況來(lái)判斷到底選擇的是哪個(gè)開(kāi)關(guān)。所以需要使用動(dòng)態(tài)的OnValueChanged()方法。同時(shí)要在三個(gè)toggle上掛載腳本:


這樣的話,就實(shí)現(xiàn)了我的需求,也就是本文開(kāi)頭的效果。這是我對(duì)toggle的使用心得,不知道我說(shuō)的夠不夠清楚。不喜勿噴??!