2017-05-28 45 views
0

我在Unity3D iOS遊戲中遇到了錯誤。UnityEngine.Object不包含GetComponent的定義

Assets/Scripts/Block/BlockMaker.cs(24,55): error CS1061: Type `UnityEngine.Object' does not contain a definition for `GetComponent' and no extension method `GetComponent' of type `UnityEngine.Object' could be found (are you missing a using directive or an assembly reference?) 

enter image description here

這裏是代碼:

Block block = null; 

     for (int i = 0; i < listBlocks.Count; ++i) 
     { 
      if (listBlocks[i].GetComponent<Block>().type == type) { 
       block = Instantiate(listBlocks[i]).GetComponent<NormalBlock>(); // Error for this line 
      } 
     } 

下面是截圖 enter image description here

enter image description here

如何解決這個問題呢?已經Google搜索..沒有幫助我修復。

+1

如果listBlocks是什麼類型? – Programmer

+0

@Programmer public List listBlocks; – iPhoneProcessor

+0

腳本'Block'是否從MonoBehavior繼承?另外,腳本,你有內部的代碼,它是否從'MonoBehavior'繼承?如果你不介意,你的Unity版本是什麼? – Programmer

回答

2

在舊版本的Unity,調用Instantiate功能,會嘗試調用Object.Instantiate它返回一個Object

在Unity的最新版本,稱Instantiate將調用GameObject.Instantiate它返回一個GameObject,所以你甚至不需要將其轉換爲一個遊戲對象。此代碼能夠與5.6版本編譯,但不能與您的版本4.6.9編譯。

用途:

block = GameObject.Instantiate(listBlocks[i]).GetComponent<NormalBlock>(); 

或在Hellium的answer提到它轉換爲GameObject

GameObject obj = Instantiate(listBlocks[i]) as GameObject; 
block = obj.GetComponent<NormalBlock>(); 
+0

在4.6.9 bro中沒有修復,上面的答案來自Hellium修復的問題。感謝您的支持 – iPhoneProcessor

+0

這不是問題,它不是固定的。如上所述,我說它可以在5.6而不是4.6.9中運行。在最新版本的Unity中添加了更多功能,因此您無需投射它。請再次閱讀答案。 – Programmer

相關問題