Dropdown 組件
該組件可以用來讓用戶選擇列表中的一個選項。
控件顯示當前選擇的選項。單擊后,它會打開選擇列表,可以在列表當中選擇一個新的選項。
選擇新的選項后,列表將再次關閉,並且控件將顯示新選擇的選項。
如果用戶單擊控件本身或者“畫布”中的其他任意位置,該列表也將關閉。
Template:(模板)
下拉列表模板的 Rect 轉換
Caption Text:(標題文字)
文本組件,用於保存當前所選選項的文本(可選)
Caption Image:(標題圖片)
Image組件,用於保存當前所選選項的圖像(可選)
Item Text:(項目文字)
用於保存項目文本的Text組件(可選)
Item Image:(項目圖片)
Image組件,用於保存項目的圖像(可選)
Value:(值)
當前所選選項的索引。0是第一個選項,1是第二個選項,依此類推。
Options:(選控件)
可選項的列表。可以為每個選項指定文本字符串和圖像。
該按鈕具有一個稱為 On Value Changed 的事件,該事件在用戶完成對列表中選項之一的單擊時響應,它支持發送整數值,該值便是所選選項的索引。
在模板中必須包含一個項目,並且要啟用 Toggle 組件。當單擊下拉控件創建實際的下拉列表時,此項會重復多次,並且列表中的每個選項都使用同一個副本。
設置文字和圖像內容
下拉菜單為每個選項提供了一個文本內容和一個圖像內容。文本和圖像都是可選的,僅在將下拉菜單設置為支持下拉菜單時才能使用它們。
如果同時設置了標題文本和項目文本屬性,則下拉菜單支持每個選項的文本。
使用 GameObject> UI> Dropdown 菜單項時,默認情況下會進行設置。
-
-
標題文本是用於保存當前所選選項的文本的文本組件,它通常是 Dropdown GameObject 的子級
-
項目文本是用於保存每個選項文本的文本組件,它通常是 Item GameObject 的子級
-
如果同時設置了標題圖像和項目圖像屬性,則該下拉菜單將為每個選項提供一個圖像。這些在默認情況下未設置。
-
-
標題圖像是圖像組件,用於保存當前所選選項的圖像。它通常是Dropdown GameObject的子級
-
項目圖像是圖像組件,用於保存每個選項的圖像。它通常是Item GameObject的子級
-
用於下拉菜單的實際文本和圖像是在下拉菜單組件的“選項”屬性中指定的,或者可以通過代碼進行設置。
下拉列表的位置
下拉列表相對於下拉控件的位置由模板 Rect 變換的錨點和樞紐決定。
默認情況下,該列表將顯示在控件下方,這是通過將模板錨定到控件的底部來實現的。
模板的樞軸也需要在頂部,以便隨着模板的擴展以容納可變數量的選項,它只會向下擴展。
Dropdown 控件具有簡單的邏輯,可以防止下拉列表顯示在 Canvas 的邊界之外,因為這將使某些選項無法選擇。
如果默認位置的下拉菜單不在 Canvas 矩形中,則其相對於控件的位置相反。
例如:在默認下方不足以顯示的情況下,該控件下方顯示的列表將會顯示在其上方。
但這種邏輯有一定的局限性:下拉模板的大小不得超過 Canvas 大小減去下拉控件的大小的一半,
否則,如果將下拉控件放在 Canvas 的中間,則在任一位置上可能都沒有列表顯示的空間。
實例運用
運用 Dropdown 下拉列表組件,在列表中選擇並改變場景中 Cube 的顏色。代碼如下:
1 public Dropdown dropdown; 2 public GameObject Cube; 3 public Image image; 4 5 void Update() 6 { 7 int values = dropdown.value; 8 ChangeColor(values); 9 } 10 11 public void ChangeColor(int value) 12 { 13 switch (value) 14 { 15 case 0: 16 Cube.GetComponent<MeshRenderer>().material.color = Color.blue; 17 image.color = Color.blue; 18 break; 19 case 1: 20 Cube.GetComponent<MeshRenderer>().material.color = Color.green; 21 image.color = Color.green; 22 break; 23 case 2: 24 Cube.GetComponent<MeshRenderer>().material.color = Color.red; 25 image.color = Color.red; 26 break; 27 case 3: 28 Cube.GetComponent<MeshRenderer>().material.color = Color.white; 29 image.color = Color.white; 30 break; 31 case 4: 32 Cube.GetComponent<MeshRenderer>().material.color = Color.yellow; 33 image.color = Color.yellow; 34 break; 35 } 36 }
實際效果:
*** | 以上內容僅為學習參考、學習筆記使用 | ***