2017-02-01 75 views
1

對於我正在使用Unity的學校項目。我正在做一個「遊戲」,你需要用電纜連接設備。 所以我有一個名爲「設備」與腳本「deviceController」的對象。 Device對象有一個包含其他對象的List,其中包含一個名爲「portController」的腳本。 當前即時嘗試在deviceController中將bool(anyCablesConnected)設置爲true,如果端口中有任何電纜連接到設備,並且沒有連接到設備的電纜,則將bool設置爲false。 portController也有一個叫做「佔用」的布爾。Unity GameObject與包含其他對象的列表

只有我不知道如何做到這一點。我是否使用foreach循環或類似的東西?

foreach(port in device){ 
    // IF A PORT FROM A DEVICE IS OCCUPIED, SET ANYCABLESCONNECTED TO TRUE 
    if (occupied == true){ 
     anyCablesConnected = true; 
    } else { 
     anyCablesConnected = false; 
    } 
} 

像這樣的事情?我沒有真正使用foreach循環。但我希望你們能幫助我!

+0

你如何測試設備是否被「佔用」? – Ben

回答

1

如果我理解正確,如果至少連接了一根電纜,則應該是anyCablesConnected。該邏輯是:

anyCablesConnected = false; 

foreach (var port in device) 
{ 
    // IF A PORT FROM A DEVICE IS OCCUPIED, SET ANYCABLESCONNECTED TO TRUE 
    if (port.GetComponent<portController>().occupied) 
    { 
     anyCablesConnected = true; 

     // No need to continue looping, we have already found a cable 
     break; 
    } 
} 

或者你可以使用LINQ更加緊湊的解決方案:

anyCablesConnected = device.Any(x => x.GetComponent<portController>().occupied); 

請注意,我已經取得了一些假設,你occupied標誌是如何被訪問!

0

好吧,雖然寫答案似乎已經彈出。但是爲了讓我刪除一切,同時給你一些關於foreach是如何工作的背景信息。

包含字符串的列表; List<string>,會被寫成這樣:

List<string> listWithStrings = new List<string>(); 

listWithStrings.Add("Hello"); 
listWithStrings.Add("World"); 

和循環通過與一個foreach:

foreach (string stringInList in listWithStrings) { 
    Debug.Log(stringInList); 
    // The first loop stringInList will be "Hello", 
    // the second loop it will be "World" 
} 

這是幾乎相同的標準for循環將是:

for (int i = 0; i < listWithStrings.Count; i++) { 
    Debug.Log(listWithStrings[i]); 
} 

但更容易和更清潔。

相關問題