一直在网上搜索,还没有得到一个直接的答案。我想做的是:
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);
}
}但它告诉我它已经过时了。任何帮助都是非常感谢的。
发布于 2015-09-02 08:49:35
你现在得用类型了。看看这是否有效:
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);
}
}无论如何,这比使用字符串要好得多。字符串更容易出错。
发布于 2015-09-02 04:44:04
使用泛型版本添加组件。
i.e gameObject.AddComponent<Ability>();但是你需要将能力转化为一个类。
我建议把你所有的能力作为能力的子类。
然后显式地按名字添加能力..。
i.e gameObject.AddComponent<AbilityInvisible>();
i.e gameObject.AddComponent<AbilityInstaGib>();但是,您将不再能够通过名称字符串动态添加功能。
为了解决这个问题,您可以使用接口,从而使您能够实现IAbility接口。
然后,您可以将接口注入到方法中,以便向您的gameObject添加功能.
i.e
public void UseAbility(IAbility ability)
{
gameObject.AddComponent(ability);
}要叫它,你只需传递能力的名字.
AddAbility(AbilityInvisible);发布于 2015-09-02 04:44:51
class Weapon1 : MonoBehvaiour
{
}
class Character : MonoBehaviour
{
void useAbility()
{
gameObject.AddComponent<Weapon1>();
}
}https://stackoverflow.com/questions/32344698
复制相似问题