Unity3d, C # pass функция в качестве параметра

1

У меня есть 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 чтобы вносить изменения в мою игру в зависимости от данных.

Теги:
delegates
unity3d
parameters

2 ответа

4
Лучший ответ

Я не уверен, чего вы пытаетесь достичь здесь. Но чтобы ответить на ваш вопрос, вы можете передавать методы в качестве параметров с помощью делегатов. Вот пример:

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.

  • 0
    Как код будет различать, что MethodOneDelegate является MethodOne s? Я думал, что мне нужно присвоить значения.
  • 0
    MethodOneDelegate описывает только сигнатуру MethodOne (принимает два целых числа и возвращает void). Метод, который будет вызываться StaticMethod , предоставляется в качестве параметра (scriptA.MethodOne).
Показать ещё 3 комментария
0

Нужно ли начинать методы, когда вы ставите их в качестве параметров? Или вам нужны значения из этих методов?

В любом случае, вы можете сделать две вещи: попробуйте это или просто передайте имя метода как строку, а в вашем методе проверьте, какое имя было введено, и запустите этот метод в вашем методе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню