2017-02-01 1 views
1

학교 프로젝트에서 저는 Unity와 함께 일하고 있습니다. 임씨는 케이블로 장치를 연결해야하는 "게임"을 만들고 있습니다. 그래서 "deviceController"스크립트와 함께 "device"라는 객체가 있습니다. Device 객체에는 "portController"라는 스크립트가있는 다른 객체가 들어있는 List가 있습니다. 현재 deviceController에서 bool (anyCablesConnected)을 true로 설정하려는 경우, 장치에 대한 포트에 케이블이 있고 장치에 연결된 케이블이없는 경우 bool을 false로 설정하십시오. portController에는 "Occupied"라는 bool도 있습니다.다른 개체를 포함하는 목록이있는 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를 사용할 수 있습니다 : 그의 논리는 내가 당신의 occupied 플래그에 액세스하는 방법에 관한 몇 가지 가정을 만들었습니다

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

주의!

0

답글을 쓰는 동안 괜찮 았던 것 같습니다. 그러나 foreach가 작동하는 방법에 대한 몇 가지 컨텍스트를 제공하면서 모든 것을 삭제할 수 있도록하십시오.

문자열이 포함 된 목록.

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

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

와 foreach는 끝까지 루프 : List<string>는 다음과 같이 기록 될 것이기 루프 것

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

거의 표준과 동일합니다 :

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

하지만 훨씬 쉽고 깨끗합니다.

관련 문제