所以我不能做gameObject.AddComponent(StringVariable);再也没有......替代方案是什么?

时间:2015-09-02 04:35:34

标签: c# unity3d

一直在网上搜索,并没有真正得到答案。我想做的是:

class Weapon1 
{
   public string Ability = "example";
}

class Weapon2 
{
   public string Ability = "other";
}

class Character : MonoBehaviour
{
  Weapon1 foo = new weapon1();
  Weapon2 boo = new weapon2();
  void useAbility () 
  {
     gameObject.AddComponent(foo.Ability);
     gameObject.AddComponent(boo.Ability);
  }
}

但它告诉我它已经过时了。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

使用通用版本添加组件。

i.e gameObject.AddComponent<Ability>();

但是你需要将Ability转换成一个类。

我建议将你的所有能力作为能力的子类创建。

然后按名称明确添加能力......

i.e gameObject.AddComponent<AbilityInvisible>();
i.e gameObject.AddComponent<AbilityInstaGib>();

但您将无法再通过名称字符串动态添加功能。

为了解决这个问题,你可以使用接口,所以让你的能力实现IAbility接口。

然后你可以将接口注入一个方法来为gameObject添加这个功能......

public void UseAbility(IAbility ability)
{
  gameObject.AddComponent(ability);
}

要调用此功能,您只需传入能力名称......

AddAbility(AbilityInvisible);

答案 1 :(得分:1)

你现在必须使用类型。看看是否有效:

var errorString: NSString?
let service = DaService(name: "My Name", error: &errorString)

无论如何,这比使用字符串要好得多。字符串更容易出错。

答案 2 :(得分:0)

def helloworld():
    qParams = request.GET.get('q', '')
     ....
     ....