2017-02-22 16 views
-1

如何在不知道其類型的情況下禁用組件? 我得到的最好的是這個,但組件上沒有enabled選項?即使不知道類型也禁用組件

Component[] tmpComponents = tmpGO.GetComponents <Component>(); 
foreach (Component tmpComponent in tmpComponents) 
{ 
    if (tmpComponent.GetType() != Transform && tmpComponent.GetType() != MeshRenderer) 
    { 
     tmpComponent.enabled = false; <= ??? 
    } 
} 

我也嘗試

tmpGO.GetComponent <tmpComponent.GetType()>().enabled = false; 

但沒有奏效。

更新: 我嘗試這個,但現在它給予不同的長度。

Component[] components = tmpGO.GetComponents <Component>(); 
Behaviour[] behaviours = tmpGO.GetComponents <Behaviour>(); 
for (int x = 0; x < components.Length; x++) 
{ 
    if (components[x].GetType() != typeof (Transform) && components[x].GetType() != typeof (MeshRenderer)) 
    { 
     Debug.Log (components.Length); 
     Debug.Log (behaviours.Length); 
     //behaviours [x].enabled = false; 
    } 
} 

這不起作用,因爲詢問行爲不會給我一個可以啓用的組件的完整列表。

回答

-1

要修改的屬性不是「啓用」而是「啓用」。

tmpComponent.enabled = false; 
1

編譯器試圖警告你,類Component沒有名爲enabled屬性/場 - 它沒有,因爲有不能被啓用/禁用某些組件類型。

你可以,但是,過濾掉與組件類型Behaviour

foreach (var b in tmpGO.GetComponents<Behaviour>()) { 
    b.enabled = false; 
} 

從手動引用:

行爲是可以啓用或禁用組件。

+0

好的,但我如何比較它的類型?如果我必須禁用一切,那麼我可能只是禁用gameobject? – user3014330

+0

@ user3014330如果你只想要一個或多個特定類型的組件,我通常會使用'GetComponents'類型參數進行過濾。無論您指定什麼類型,它只會返回該類型的組件。 – rutter

+0

那麼,我的目標主要是在腳本放置在屏幕上後重新啓用腳本,就像通過構建系統一樣。 因此,我最終使用,但我希望組件只會抱怨說,某些不能被禁用,而不是沒有,總之... – user3014330

相關問題