Есть ли способ поставить в очередь вызов функции и ее параметры для последующего вызова?

Есть ли способ сохранить вызовы функций и их переменные параметры в базе данных, когда проигрыватель находится в автономном режиме, и вызывать их снова, когда проигрыватель возвращается в режим онлайн.

Привет! Я работаю над новой игрой (Unity C#), в которой игрок проходит через зоны с небольшим приемом. Игрок находит кодовые слова и вводит их в поле, чтобы разблокировать контент. В то же время я хочу записать запущенные кодовые слова для каждого пользователя. Проблема в том, что соединение может быть потеряно во время сеанса. Мне удавалось ставить в очередь функции каждый раз, когда игрок вводит кодовое слово, когда он отключен, но после получения приема игрок снова отправляет только последнюю запись. Помощь очень ценится!

public void NotConnected()
{
        CallsOnQueue.Add( () => StartCoroutine(TestCodeword())); 
}

public void BackOnline()
{
        if (CallsOnQueue.Count == 0)
        {
            LookforCodewordInDB();
        }    
        else
        {
            foreach (Action item in Callsonqueue)
                StartCoroutine(TestCodeword(teamname, codeword, city, date));

        }
        Callsonqueue.Clear();
}

2 ответа

Я думаю, что наиболее разумный подход - сохранить функцию как объект в базе данных, а затем извлечь ее.

public class MyFunction{
     string FuncionName { get; set; }
     public string Param1 { get; set; }
     public string Param2 { get; set; }
     //more params
}

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

switch (storedFunction.FunctionName)
{
     case "myFunction":
         myFunction();
}

Мне кажется, что ваш код в порядке, за исключением цикла foreach.

Вместо того, чтобы вызывать сохраненное действие, вы запускаете одну и ту же сопрограмму для каждого элемента!

Измените свой код на этот

foreach (Action item in Callsonqueue)
                item.Invoke():
Другие вопросы по тегам