Unity3d,C#传递函数作为参数

时间:2015-03-26 08:22:57

标签: c# parameters unity3d delegates

ScriptA有很多void个功能:

void methodOne() { 
   some code
}

void methodTwo(int a, int b) {
}

我想传递给另一个脚本的静态方法。让我们说scriptB

ScriptB.staticMethod(methodOne, some, other, primitive, parameters);
ScriptB.staticMethod(methodTwo(a, b), some, other, parameters);

我的脚本的主要思想是ScriptB将从服务器获取数据并调用从ScriptA获取的方法,以根据数据在游戏中进行更改。

2 个答案:

答案 0 :(得分:5)

我不确定你想在这里实现什么。 但要回答您的问题,您可以使用委托将方法作为参数传递。这是一个例子:

public class ScriptA
{
    public delegate void MethodOneDelegate(int a, int b);

    public void MethodOne(int a, int b)
    {
        Console.WriteLine(a + b);
    }
}

public static class ScriptB
{
    public static void StaticMethod(ScriptA.MethodOneDelegate function, int a, int b)
    {
        function(a, b);
    }
}

public static void Main()
{
    ScriptA scriptA = new ScriptA();
    ScriptB.StaticMethod(scriptA.MethodOne, 1, 2);
}

还有其他解决方案,您可以查看System.Func和System.Action。

答案 1 :(得分:0)

将它们作为参数放入时,是否需要启动这些方法?或者您需要这些方法的值吗?

无论哪种方式,您可以做两件事,try this或者只是将方法的名称作为字符串传递,并在方法中检查输入的名称,并在方法中启动该方法。