2016-05-13 32 views
0

我需要將特定的腳本附加到GameObject。Unity如何AddComponent <T>()?

public T ElegirScript<T>() 
    { 
     switch((int)tipoEdificio) // enum 
     { 
     case 0: 

      return Edificios; // a class/script not instance 
      break; 
     case 1: 

      return PlantaEnergia; // a class/script not instance 
      break; 
     default: 
      break; 
     } 
    } 


gameobject.AddComponent<ElegirScript()>(); 

我該如何做到這一點?我有錯誤,謝謝。

我需要第一個返回類型或組件的方法,返回必須是腳本。然後我AddComponent並給出程序選擇的類型,我該怎麼做?例子。

+1

你的錯誤是什麼?把它們包含在你的問題中! :) – Tom

+1

多數民衆贊成不是如何泛型工作https://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx – yes

回答

2

你不能使用帶有添加組件的非組件類。這意味着你的類必須從MonoBehaviour繼承才能被添加到gameObject。其次,那不是你首先使用泛型的方式。如果你只是想在一個條件下爲什麼還要使用泛型懶得添加不同成分基地只是嘗試:

if(condition) 
gameObject.AddComponent<MyMonoBehaviourClass1>(); 
else 
gameObject.AddComponent<MyMonoBehaviourClass2>(); 

我終於成功地做作品想要,但授予它不是一個通用的解決方案。 Chages到OP代碼:

public Type ElegirScript() 
    { 
     switch ((int)tipoEdificio) // enum 
     { 
      case 0: 
       return typeof(Edificios); // a class/script not instance 
      case 1: 
       return typeof(PlantaEnergia); // a class/script not instance 
      default: 
       return null;//Or throw exception here 
     } 
    } 

現在你可以調用gameObject.AddComponent(ElegirScript());和它工作得很好。

+0

不明白,我需要一種方法返回一個TYPE或COMPONENT for做addComponent () – user3481415

+0

我覺得你很困惑。您不能將方法作爲AddComponent的類型調用。即使你的方法返回一個Type。 –

+0

好的,那麼我必須始終將組件指定給程序?該方案做出決定? – user3481415