首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >所以我不能再做gameObject.AddComponent(StringVariable)了.还有别的选择吗?

所以我不能再做gameObject.AddComponent(StringVariable)了.还有别的选择吗?
EN

Stack Overflow用户
提问于 2015-09-02 04:35:33
回答 3查看 67关注 0票数 0

一直在网上搜索,还没有得到一个直接的答案。我想做的是:

代码语言:javascript
运行
复制
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);
  }
}

但它告诉我它已经过时了。任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-02 08:49:35

你现在得用类型了。看看这是否有效:

代码语言:javascript
运行
复制
class Weapon1 
{
   public Type Ability = typeof(ExampleAbilityClassName);
}

class Weapon2 
{
   public Type Ability = typeof(OtherAbilityClassName);
}

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

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

票数 1
EN

Stack Overflow用户

发布于 2015-09-02 04:44:04

使用泛型版本添加组件。

代码语言:javascript
运行
复制
i.e gameObject.AddComponent<Ability>();

但是你需要将能力转化为一个类。

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

然后显式地按名字添加能力..。

代码语言:javascript
运行
复制
i.e gameObject.AddComponent<AbilityInvisible>();
i.e gameObject.AddComponent<AbilityInstaGib>();

但是,您将不再能够通过名称字符串动态添加功能。

为了解决这个问题,您可以使用接口,从而使您能够实现IAbility接口。

然后,您可以将接口注入到方法中,以便向您的gameObject添加功能.

i.e

代码语言:javascript
运行
复制
public void UseAbility(IAbility ability)
{
  gameObject.AddComponent(ability);
}

要叫它,你只需传递能力的名字.

代码语言:javascript
运行
复制
AddAbility(AbilityInvisible);
票数 1
EN

Stack Overflow用户

发布于 2015-09-02 04:44:51

代码语言:javascript
运行
复制
class Weapon1 : MonoBehvaiour
{
}

class Character : MonoBehaviour
{
    void useAbility()
    {
        gameObject.AddComponent<Weapon1>();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32344698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档