香港6合总彩透码主论坛
 找回密碼
 注冊帳號

掃一掃,訪問微社區

GUI UGUI 一個常見的按鈕問題

20
回復
1894
查看
打印 上一主題 下一主題
[ 復制鏈接 ]
7日久生情
3167/5000
排名
782
昨日變化

61

主題

808

帖子

3167

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69941
好友
1
蠻牛幣
10221
威望
0
注冊時間
2015-1-20
在線時間
1064 小時
最后登錄
2020-2-23
50蠻牛幣
本帖最后由 煮粥俠 于 2019-4-13 04:10 編輯

菜單界面有多個button,用鍵盤上下選擇(如圖1)。  
當鼠標點擊空白處時,會取消對button的選擇(如圖2).
但我需要始終有一個按鈕在選中的狀態,也就是說,如何在鼠標點擊空白處時,不取消button的選擇?





回復

使用道具 舉報

7日久生情
3167/5000
排名
782
昨日變化

61

主題

808

帖子

3167

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69941
好友
1
蠻牛幣
10221
威望
0
注冊時間
2015-1-20
在線時間
1064 小時
最后登錄
2020-2-23
沙發
樓主 2019-4-13 04:17:29 只看該作者
這個問題曾經提問過,但大概因為描述不清楚,沒有很好的答案。其實這應該是一個很常見很基本的功能吧?
我目前的解決思路是:當前選中的selectable對象存在一個變量引用里,在屏幕前放一個全透明、覆蓋全屏幕的button,當它被點擊時執行自己腳本上的方法:重新選中上一個選擇的對象。
看起來貌似可以達成功能,但是實際上還是有按鈕被取消選擇又重新選中的一個過程。自己的解決方法覺得不完美,所以重新發帖繼續等大佬。
回復

使用道具 舉報

3偶爾光臨
150/300
排名
16220
昨日變化

2

主題

20

帖子

150

積分

Rank: 3Rank: 3Rank: 3

UID
293641
好友
0
蠻牛幣
586
威望
0
注冊時間
2018-8-15
在線時間
84 小時
最后登錄
2019-12-16
板凳
2019-4-13 17:00:34 只看該作者
這個看著像復選框的功能,Toggle Group了解一下。
回復

使用道具 舉報

3偶爾光臨
150/300
排名
16220
昨日變化

2

主題

20

帖子

150

積分

Rank: 3Rank: 3Rank: 3

UID
293641
好友
0
蠻牛幣
586
威望
0
注冊時間
2018-8-15
在線時間
84 小時
最后登錄
2019-12-16
地板
2019-4-13 17:07:37 只看該作者
我用Toggle Group試了一下,能達到你說的這種效果,toggle選中狀態下,鼠標點擊其他地方,選中狀態不會改變,只需要把toggle下面的checkMark的√圖片去掉,換成顏色就好
回復

使用道具 舉報

7日久生情
3167/5000
排名
782
昨日變化

61

主題

808

帖子

3167

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69941
好友
1
蠻牛幣
10221
威望
0
注冊時間
2015-1-20
在線時間
1064 小時
最后登錄
2020-2-23
5#
樓主 2019-4-13 19:45:12 只看該作者
hongyaolee 發表于 2019-4-13 17:00
這個看著像復選框的功能,Toggle Group了解一下。

看起來像,具體功能是不一樣的
回復

使用道具 舉報

7日久生情
3167/5000
排名
782
昨日變化

61

主題

808

帖子

3167

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69941
好友
1
蠻牛幣
10221
威望
0
注冊時間
2015-1-20
在線時間
1064 小時
最后登錄
2020-2-23
6#
樓主 2019-4-13 19:48:04 只看該作者
本帖最后由 煮粥俠 于 2019-4-13 20:01 編輯
hongyaolee 發表于 2019-4-13 17:07
我用Toggle Group試了一下,能達到你說的這種效果,toggle選中狀態下,鼠標點擊其他地方,選中狀態不會改變 ...

這個我試過,在這種情況下,雖然Toggle的選中狀態沒有變,但是EventSystem的當前選中對象依然是空(見頂樓圖3),按鍵盤上的確認鍵是沒有反應的。因為Toggle的選中狀態 其實是Toggle的isOn屬性,不是Selectable的選中狀態,見下圖:


回復

使用道具 舉報

7日久生情
3167/5000
排名
782
昨日變化

61

主題

808

帖子

3167

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69941
好友
1
蠻牛幣
10221
威望
0
注冊時間
2015-1-20
在線時間
1064 小時
最后登錄
2020-2-23
7#
樓主 2019-4-13 20:23:19 只看該作者
截圖一個Debug模式比較容易說明白: 點擊空白處后,沒有影響toggle的 Is On屬性(黑色虛線處),所以toggle的勾選還在。但是我需要的是selectable的Has Selection 不被取消勾選,這樣鍵盤的操作才對這個button有效


回復

使用道具 舉報

3偶爾光臨
150/300
排名
16220
昨日變化

2

主題

20

帖子

150

積分

Rank: 3Rank: 3Rank: 3

UID
293641
好友
0
蠻牛幣
586
威望
0
注冊時間
2018-8-15
在線時間
84 小時
最后登錄
2019-12-16
8#
2019-4-13 23:18:05 只看該作者
煮粥俠 發表于 2019-4-13 19:48
這個我試過,在這種情況下,雖然Toggle的選中狀態沒有變,但是EventSystem的當前選中對象依然是空(見頂樓 ...

恩,明白你的意思了,查了一下api,EventSystem里面有一個SetSelectedGameObject方法,可以手動設置當前選中的對象,可以定義一個gameobject,在選中某個button的時候,可以用gameobject保存一下當前選中的對象(EventSystem的api里面有currentSelectedGameObject屬性,可以直接獲取),鼠標點擊的時候,用上面的方法把選中對象手動設置為最后選中的那個對象就行了。
我的大體思路是這樣,不過具體我沒試過,應該可行,你可以自己寫代碼試一下看看
https://docs.unity3d.com/ScriptReference/EventSystems.EventSystem.html
回復

使用道具 舉報

7日久生情
3167/5000
排名
782
昨日變化

61

主題

808

帖子

3167

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69941
好友
1
蠻牛幣
10221
威望
0
注冊時間
2015-1-20
在線時間
1064 小時
最后登錄
2020-2-23
9#
樓主 2019-4-14 20:55:33 只看該作者
hongyaolee 發表于 2019-4-13 23:18
恩,明白你的意思了,查了一下api,EventSystem里面有一個SetSelectedGameObject方法,可以手動設置當前 ...

非常感謝呀,不過你可以看一下我在2樓說的,目前我就是這樣實現的。但是覺得不夠完美,因為button還是會有一個“取消選擇”->"重新選中"的過程(雖然是在1幀內),但是,如果button有OnSelect()方法,貌似會觸發。

不過UGUI的源碼我也粗淺的研究過一下,沒找到其他辦法。不知道是不是只能這么做了,還是希望有更好的方法。因為感覺這個功能其實挺常見,挺基礎的,還要手動實現,太不方便了。
回復

使用道具 舉報

7日久生情
3167/5000
排名
782
昨日變化

61

主題

808

帖子

3167

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69941
好友
1
蠻牛幣
10221
威望
0
注冊時間
2015-1-20
在線時間
1064 小時
最后登錄
2020-2-23
10#
樓主 2019-4-14 20:58:30 只看該作者
hongyaolee 發表于 2019-4-13 23:18
恩,明白你的意思了,查了一下api,EventSystem里面有一個SetSelectedGameObject方法,可以手動設置當前 ...

話說之前的某一個版本Unity (大概是5.5之前吧),EventSystem還有個公開的lastSelectedGameObject成員,結果后來一更新,它把這個給去掉了,還得自己手動記錄上一個選擇對象,真是佛了。。
回復

使用道具 舉報

6蠻牛粉絲
1452/1500
排名
3110
昨日變化

5

主題

403

帖子

1452

積分

Rank: 6Rank: 6Rank: 6

UID
234410
好友
5
蠻牛幣
1833
威望
0
注冊時間
2017-7-26
在線時間
554 小時
最后登錄
2020-1-21
11#
2019-4-15 16:39:03 只看該作者
其實吧 我倒感覺可以自己繼承下 Button 或者 Toggle 然后自己寫功能或者重寫 。。。
咋改咋寫你都隨意了。。。
回復

使用道具 舉報

7日久生情
3167/5000
排名
782
昨日變化

61

主題

808

帖子

3167

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69941
好友
1
蠻牛幣
10221
威望
0
注冊時間
2015-1-20
在線時間
1064 小時
最后登錄
2020-2-23
12#
樓主 2019-4-16 00:05:42 只看該作者
隨幻Kaller 發表于 2019-4-15 16:39
其實吧 我倒感覺可以自己繼承下 Button 或者 Toggle 然后自己寫功能或者重寫 。。。
咋改咋寫你都隨意了。 ...

鼠標點擊空白處就取消當前的選擇 這貌似是在EventSystem里面執行的。我甚至希望不要檢測任何鼠標的操作。。關于你說的方向,怎么改button有具體一點的思路嗎?
回復

使用道具 舉報

6蠻牛粉絲
1209/1500
排名
5481
昨日變化

20

主題

229

帖子

1209

積分

Rank: 6Rank: 6Rank: 6

UID
236132
好友
2
蠻牛幣
2780
威望
0
注冊時間
2017-8-6
在線時間
700 小時
最后登錄
2020-2-23
13#
2019-4-20 11:25:02 只看該作者
點中之后按鈕可以設為禁用狀態 把禁用狀態設為高亮就行 缺點就是無法再次點擊 ,需要點其他按鈕后該按鈕恢復正常
回復

使用道具 舉報

7日久生情
3167/5000
排名
782
昨日變化

61

主題

808

帖子

3167

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69941
好友
1
蠻牛幣
10221
威望
0
注冊時間
2015-1-20
在線時間
1064 小時
最后登錄
2020-2-23
14#
樓主 2019-4-21 04:45:15 只看該作者
LLzj 發表于 2019-4-20 11:25
點中之后按鈕可以設為禁用狀態 把禁用狀態設為高亮就行 缺點就是無法再次點擊 ,需要點其他按鈕后該按鈕恢 ...

這樣做是為了什么?禁用直接就取消選擇了
回復

使用道具 舉報

6蠻牛粉絲
1209/1500
排名
5481
昨日變化

20

主題

229

帖子

1209

積分

Rank: 6Rank: 6Rank: 6

UID
236132
好友
2
蠻牛幣
2780
威望
0
注冊時間
2017-8-6
在線時間
700 小時
最后登錄
2020-2-23
15#
2019-4-22 15:34:32 只看該作者
煮粥俠 發表于 2019-4-21 04:45
這樣做是為了什么?禁用直接就取消選擇了

把你想要的選中狀態的圖片跟禁用狀態的圖片設為一張圖片
  選中之后 Interactable=false  你點其他按鈕的時候Interactable=true  這可以 不過比較麻煩 按鈕太多了代碼特別亂  建議使用Toggle 設一個組就行了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊帳號

本版積分規則

香港6合总彩透码主论坛
赶牛网配资 友钱网 股票行情大盘走势图下载 炒股的人一生穷拉涨停 601268股票行情中心 大乐透 开奖 结果股票行情 投资理财平台推荐.中欧钱滚滚 苹果股票 炫多配资 易宝配资