Unity3D,C#:将函数名称保存为变量

时间:2016-02-11 22:04:57

标签: c# function unity3d

我正在使用Unity3D并试图实现以下目标。 我想在类中存储一些参数以及“特殊规则” - 它们可以作为此类或其他类中的函数。

理想情况下,我会想要一些表现得像这样的东西:

public class Weapon
{
    public DamageHandler damageHandler; //script that have all special rule functions
    public string weaponName;
    public int damage;
    public ???? specialRule; //this is the rule of interest

    public void DealDamage()
    {
        damageHandler = GetComponent<DamageHandler>();
        damageHandler.specialRule(damage); //call the function that is set in Weapon Class
    }        
}

我知道我可以将specialRule保存为字符串并使用反射。有没有其他方式/更好的方法来处理这种情况?

1 个答案:

答案 0 :(得分:4)

您要找的是Action<int>我的朋友。

public class Weapon
{
    public DamageHandler damageHandler; //script that have all special rule functions
    public string weaponName;
    public int damage;
    public Action<int> specialRule; //this is the rule of interest

    public void DealDamage()
    {
        damageHandler = GetComponent<DamageHandler>();
        damageHandler.specialRule(damage); //I call the function with the name that is set in Weapon Class
    }        
}

Action<ParamType1, ParamType2, ParamType3, .....>代表void函数代理。

Func<ParamType1, ParamType2, ParamType3, ....., ReturnType>表示具有返回值

的函数

每个人可以从1或2个类型的参数中获取,我相信大约17个左右