2017-09-17 32 views
1

如何檢查列表中的所有gameObjects是否滿足Unity中的某個條件?我有9個相同的腳本的對手。他們都有一個列表,它通過 更改我試過這個代碼,但它返回奇怪的結果。如果list中的所有gameObjects滿足條件

void Update() 
{ 
    for (int i = 0; i < ChildTiles.Count; i++) 
    { 
     if (ChildTiles [i].GetComponent<SpriteRenderer>().color == Green) 
     { 
      _greenComplete = true; 
     } 
     else 
     { 
      _greenComplete = false; 
     } 
     //Debug.Log (gameObject + "ChildTiles[i]" + ChildTiles [i]); 
    } 
    Debug.Log (gameObject + "Green Complete " + _greenComplete); 
} 

奇怪的是,右上角撞機返回True,有兩個gameObjects爲綠色和右下撞機返回false,有兩個gameObjects爲綠色。

https://i.gyazo.com/cb3352585720e2e630315a268a436fb6.png

這一點,這樣的結果在右上角對撞機的檢查:

https://i.gyazo.com/aa210144daf5fb663292fff1fa198b27.png

這是右下對撞機這樣的結果在檢查:

https://i.gyazo.com/97ad742e723a31dddea7ab43eaf8e31a.png

我該如何解決這個問題?

+0

另一個有趣的問題。謝謝。 – statosdotcom

回答

0

問題來自您的for循環。仔細看看你寫的是什麼。對於列表中的每個元素,您都在檢查其SpriteRenderer組件的顏色是否爲綠色。如果是這種情況,則將_greenComplete設置爲true,否則將其設置爲false。

現在讓我們看看你的兩個列表,並嘗試在每一個列表上使用這個算法。對於第一個列表:

  • 第一個元素是黃色的。 _greenComplete設置爲false。
  • 第二個元素是綠色的。 _greenComplete設置爲true。
  • 第三個元素是紅色的。 _greenComplete設置爲false。
  • 第四個元素是綠色的。 _greenComplete設置爲true。

您是否看到現在的問題在哪裏?如果列表包含綠色元素,則不定義。您正在相繼定義最後一個分析元素是否爲綠色。正如我們剛剛看到的第一個列表,最後的結果是真的,因爲列表的最後一個元素是綠色的。看看你的第二個清單:

  • 第一個元素是綠色的。 _greenComplete設置爲true。
  • 第二個元素是綠色的。 _greenComplete設置爲true。
  • 第三個元素是紅色的。 _greenComplete設置爲false。
  • 第四個元素是黃色的。 _greenComplete設置爲false。

您的列表包含兩個綠色元素,但最後一次分析的元素不是綠色,導致您在最後得到的錯誤值。

要修復你的代碼並得到你想要的真實答案,你寧願去找一個while循環,當你發現一個不同於列表中不是綠色的綠色元素時,它會停止循環(你開始假設每個元素是綠色環保確實,並檢查它是否是不是這樣):

void Update() 
{ 
    int i = 0; 
    _greenComplete = true; 

    while(i < ChildTiles.Count && _greenComplete) 
    { 
     if (ChildTiles [i].GetComponent<SpriteRenderer>().color != Green) 
     { 
      _greenComplete = false; 
     } 

     i++; 
    } 

    Debug.Log (gameObject + "Green Complete " + _greenComplete); 
} 

您還可以使用LINQ對此事:

_greenComplete = ChildTiles.All (c => c.GetComponent<SpriteRenderer>().color == Green); 
+0

即使列表中只有一個綠色對象,它也會返回True。 –

+0

好吧,我現在使用此代碼:https://pastebin.com/0u2EH6iT。它等待旋轉完成,然後檢查是否有4種顏色匹配。現在的問題是,當每種顏色匹配時,只有當您點擊檢查顏色是否匹配的按鈕時纔會返回True。這是爲什麼?這裏有一個更好地理解它的gif:https://gyazo.com/a2a5c8a5051e937338807fb5ecfaa4ec –

+0

@ J.K.Harthoorn啊,所以你想要每一種顏色匹配,我沒有從你的問題中解決它。然後,我編輯了我的答案。 對於你的其他問題,很難知道這段代碼。每次旋轉方塊後,您都應該進行測試。 – Isuka