2016-05-13 5 views
0

Ich muss ein bestimmtes Skript an ein GameObject anhängen.Unity, wie kann 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()>(); 

Wie kann ich das machen? Ich habe Fehler, danke.

Ich brauche zuerst eine Methode, die einen Typ oder eine Komponente zurückgibt, die Rückkehr muss Skripts sein. dann gebe ich AddComponent ein und gebe dem Typ das Programm an, wie kann ich das machen? Beispiele.

+1

Was sind Ihre Fehler? Fügen Sie sie in Ihre Frage ein! :) – Tom

+1

das ist nicht wie Generika funktionieren https://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx – yes

Antwort

2

Sie können eine Nicht-Komponententypklasse mit Komponente hinzufügen nicht verwenden. Das bedeutet, dass Ihre Klasse von MonoBehaviour erben muss, um zu einem gameObject hinzugefügt werden zu können. Und zweitens verwenden Sie Generika überhaupt nicht. Wenn Sie nur eine andere Komponente basiert auf einer Bedingung hinzufügen möchten, warum auch bei Generika stören nur versuchen:

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

ich es geschafft, endlich das zu tun, was Op wollte aber gewährt es ist nicht eine generische Lösung. chages zu OP-Code:

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 
     } 
    } 

Jetzt können Sie gameObject.AddComponent(ElegirScript()); anrufen und es funktioniert gut.

+0

Nicht verstehen, ich brauche eine Methode, die einen TYPE oder COMPONENT für zurückgeben do addComponent () – user3481415

+0

Ich denke, Sie sind sehr verwirrt. Sie können eine Methode nicht als den Typ für AddComponent aufrufen. Auch wenn Ihre Methode einen Type zurückgibt. –

+0

ok, dann muss ich immer die Komponente zum Programm spezifizieren ?? Kann das Programm die Entscheidung treffen? – user3481415

Verwandte Themen