我有一個在腳本中定義的切換器陣列。它們在開始時都是關閉的。當用戶點擊其中一個撥動器時,該撥動器應被打開,其他撥動器應切換到關閉狀態。基本上,只能有 "一個 "開啟狀態的切換器。我如何實作這一目標?
目前在這個腳本中,當用戶點擊其中一個時,所有的切換器都會被關閉。public Toggle[] toggle;
void Start () {
for (int i = 0; i < toggle.Length; i ) {
int idx = i。
toggle[idx].onValueChanged.AddListener(delegate {
ToggleValueChanged(toggle[idx], idx)。
});
}
}
public void ToggleValueChanged (Toggle change, int index) {
for (int i = 0; i < toggle.Length; i ) {
if (i == index) {
return;
} else {
if (toggle[i].isOn) {
toggle[i].isOn = false;
}
}
}
}
uj5u.com熱心網友回復:
Unity有一個叫做ToggleGroup的組件,它允許你這樣做。
ToggleContainer父物件:
在每一個Toggle組件中參考ToggleGroup物件如下:
<場景層次:
概述:
https://gfycat.com/bossyscenteddorado
uj5u.com熱心網友回復:
像這樣改變你的ToggleValueChanged函式 :
public void ToggleValueChanged (Toggle change。int index)。
{
for (int i = 0; i < toggle.Length; i )
{
if (i == index) continue;
if (toggle[i].isOn) {
toggle[i].isOn = false;
}
}
}
當你在第一條if陳述句中回傳時,其他的toggle不會被關閉。你必須繼續迭代你的回圈。 而且,你可以使用RefrenceEqual
編輯。
事實上,每次你操作toggle[i].isOn,你都在改變它的值。所以每一次,你都在呼叫你的函式。
EDIT
試試這個 :
public void ToggleValueChanged (Toggle change。int index)。
{
for (int i = 0; i < toggle.Length; i )
{
if (i == index) continue;
if (toggle[i].isOn)
{
toggle[i].SetIsOnWithoutNotify(false)。
}
}
}
uj5u.com熱心網友回復:
為什么你需要這樣的索引?
簡單地做
public void ToggleValueChanged (Toggle change)
{
///增加一點安全保障,實際上只在以下情況下禁用所有其他的。
//這一個實際上是啟用的。
if(! change.isOn) return;
foreach(var toggle in toggles)
{
if (toggle == change) continue;
if (toggle.isOn)
{
// I would actually specifically not use "SetIsOnWithoutNotify"
//因為你永遠不知道還有誰在實際監聽狀態的變化。
//所以如果你只是簡單地將其設定為false,但不呼叫回呼事件。
//事情的表現可能與預期不同。
toggle[i].isOn = false;
}
}
并相應地
foreach(var t in toggle)
{
var currentToggle = t;
currentToggle .onValueChanged.AddListener(value => ToggleValueChanged(currentToggle)) 。
}
uj5u.com熱心網友回復:
既不需要return,也不需要continue,只要不處理這個切換,如果它是第1個索引:
public void ToggleValueChanged (Toggle change。int index)。
{
for (int i = 0; i < toggle.Length; i )
{
if (i != index)
{
toggle[i].isOn = false;
}
}
}
另外,你可以假設其他的都是關閉的,所以也沒有理由去檢查這個。
uj5u.com熱心網友回復:
如果它們是相互排斥的,它們就不是 "布爾狀態",它只是一個狀態,由一個列舉支持,包括空值。如果你的用戶界面是一組復選框,你應該把它換成一組單選按鈕。一個下拉框也可以。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/329085.html
標籤:
上一篇:使Azure門戶上的Web應用程式僅在一周內可用幾個小時
下一篇:CubemosSkeletonTrackingSDKinUnitywrapper,realsense2.dllnotfound,cubemos_engine.dllnotfound,RealSense


